我的编程空间,编程开发者的网络收藏夹
学习永远不晚

浅谈React组件props默认值的设置

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

浅谈React组件props默认值的设置

前言

在编写react组件的时候,为了兼容一些分支逻辑,我们经常会给组件的props设置一些默认值,但是有些默认值的写法会导致一些潜在的问题,比如无法推断类型,本文将对几种设置默认值的写法进行分析,总结其优劣。

解构props时设置默认值

interface IProps {
  name: string;
  age?: number;
}

const DefaultProps = (props: IProps) => {
  const { age = 10, name } = props;
  console.log(age + 10);  

  return <div />;
};

这种情况应该是我们经常会写的一种方式,在解构props时对可选类型设置默认值,在hook组件中这种方法很简洁,但是在class组件中,凡是用到这些参数的方法,我们都需要设置一次默认值,组件复杂度比较高的时候,这样写就比较容易出错。

interface IProps {
  name: string;
  age?: number;
}
class DefaultProps extends Component<IProps, {}> {
  func1() {
    const { age = 10, name } = this.props;
    //...
  }

  func2() {
    const { age = 10, name } = this.props;
    //...
  }  

  render() {
    return <div />;
  }
}

所以解构时设置默认值推荐在hook组件中使用,不推荐在class组件中使用

使用defaultProps

React的组件有一个属性defaultProps,我们可以通过这个属性来给组件设置默认参数。

比如类组件

interface IProps {
  name: string;
  age?: number;
}
class DefaultProps extends Component<IProps, {}> {
  defaultProps = {
    age: 20,
  };  
  
  func1() {
    const { age, name } = this.props;
  }

  func2() {
    const { age, name } = this.props;
  }

  render() {
    const { age, name } = this.props;
    console.log(age);  //20
    return <div />;
  }
}

这样可以避免第一种类组件设置默认值时,需要在每个地方都单独设置的冗余情况,但是也带来了新的弊端,那就是即使设置了默认值,在使用的时候也不能推断出准确的类型,依然会提示变量有undefined的风险

图片.png

所以,如果需要更准确的类型推断,这里还需要对类型进行额外的处理.

进行额外的类型校验

因为赋了默认值,我们希望能得到更准确的类型推断,所以我们可以将默认值的类型单独抽离,再合并到Props的类型中,以达到更好的类型推断.

interface IProps {
  name: string;
  age?: number;
}
class DefaultProps extends Component<Required<IProps>, {}> {
  defaultProps: Partial<IProps> = {
    age: 20,
  };
  render() {
    const { age } = this.props;
    console.log(age);
    return <div />;
  }
}

这里我们将所有属性全部设置成可选,然后根据需要设置默认值,在初始化的时候将props设置为Required这样就能在使用时准确推断类型。

图片.png

值得注意的是,这里没有检测是否所有可选类型都有默认值,如果所有的可选类型都需要默认值,可以再加上这样一个工具类型,筛选出所有可选类型。

type Filter<T> = {
  [K in keyof T as undefined extends T[K] ? K : never]: T[K];
};

于是代码变成了

interface IProps {
  name: string;
  age?: number;
  sex?: string;
}

type Filter<T> = {
  [K in keyof T as undefined extends T[K] ? K : never]: T[K];
};

class DefaultProps extends Component<Required<IProps>, {}> {
  defaultProps: Required<Filter<IProps>> = {
    age: 20,
    sex:'male'
  };
  render() {
    const { age } = this.props;
    console.log(age);
    return <div />;
  }
}

如果不写的话就会提示

图片.png

结语

到此这篇关于浅谈React组件props默认值的设置的文章就介绍到这了,更多相关React组件props默认值内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

浅谈React组件props默认值的设置

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

浅谈React组件props默认值的设置

本文主要介绍了浅谈React组件props默认值的设置,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
2023-05-17

ElementUI下拉组件el-select一次从后端获取选项并设置默认值方式

这篇文章主要介绍了ElementUI下拉组件el-select一次从后端获取选项并设置默认值方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
2023-01-16

编程热搜

目录