Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >React技巧之设置具有默认值的可选props

React技巧之设置具有默认值的可选props

作者头像
chuckQu
发布于 2022-08-19 07:15:17
发布于 2022-08-19 07:15:17
1.3K00
代码可运行
举报
文章被收录于专栏:前端F2E前端F2E
运行总次数:0
代码可运行

原文链接:https://bobbyhadz.com/blog/react-optional-props-typescript[1]

作者:Borislav Hadzhiev[2]

正文从这开始~

总览

在React TypeScript中设置具有默认值的可选props

  1. 用问号将类型上的props标记为可选。
  2. 在函数定义中对props进行解构时提供默认值。

详情

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
// App.tsx

interface EmployeeProps {
  name?: string; // 👈️ marked optional
  age?: number; // 👈️ marked optional
  country: string; // 👈️ required (no question mark)
}

function Employee({name = 'Alice', age = 30, country}: EmployeeProps) {
  return (
    <div>
      <h2>{name}</h2>
      <h2>{age}</h2>
      <h2>{country}</h2>
    </div>
  );
}

export default function App() {
  return (
    <div>
      <Employee name="Bob" age={29} country="Belgium" />

      <hr />

      <Employee country="Austria" />
    </div>
  );
}

我们标记了nameage属性作为可选的。这意味着不管有没有提供这两个属性,组件都是可使用的。

如果可选prop的值没有指定,会默认设置为undefined。没有为prop指定值,和设置值为undefined的效果是相同的。

我们还在Employee组件的定义中为nameage参数设置了默认值。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
function Employee({name = 'Alice', age = 30, country}: EmployeeProps) {
  return (
    <div>
      <h2>{name}</h2>
      <h2>{age}</h2>
      <h2>{country}</h2>
    </div>
  );
}

对象中的name属性的默认值为Alice,所以如果不提供name prop,它将被赋值为Alice

你也可以通过把props所有属性都标记为可选,来将整个props对象设置为可选。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
// App.tsx

interface EmployeeProps {
  name?: string; // 👈️ all marked optional
  age?: number;
  country?: string;
}

function Employee({
  name = 'Alice',
  age = 30,
  country = 'Austria',
}: EmployeeProps) {
  return (
    <div>
      <h2>{name}</h2>
      <h2>{age}</h2>
      <h2>{country}</h2>
    </div>
  );
}

export default function App() {
  return (
    <div>
      <Employee name="Bob" age={29} country="Belgium" />

      <hr />

      <Employee />
    </div>
  );
}

EmployeeProps类型中的所有属性都被标记为可选的,因此该组件可以在不提供任何props的情况下使用。

我们为Employee组件的所有props设置了默认值,所以如果有任何props被省略了,就会使用默认值。

参考资料

[1]

https://bobbyhadz.com/blog/react-optional-props-typescript: https://bobbyhadz.com/blog/react-optional-props-typescript

[2]

Borislav Hadzhiev: https://bobbyhadz.com/about

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2022-05-16,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 前端F2E 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
React技巧之将useState作为字符串数组
原文链接:https://bobbyhadz.com/blog/react-typescript-usestate-empty-object[1]
chuckQu
2022/08/19
8630
React技巧之将useState作为字符串数组
React报错之No duplicate props allowed
原文链接:https://bobbyhadz.com/blog/react-jsx-no-duplicate-props[1]
chuckQu
2022/08/19
2640
React技巧之将对象作为props传递给组件
原文链接:https://bobbyhadz.com/blog/react-typescript-pass-object-as-props[1]
chuckQu
2022/08/19
1.2K0
使用TypeScript创建React应用
文章链接:https://bobbyhadz.com/blog/react-create-react-app-typescript[1]
chuckQu
2022/08/19
1.1K0
React报错之组件不能作为JSX组件使用
原文链接:https://bobbyhadz.com/blog/react-cannot-be-used-as-a-jsx-component[1]
chuckQu
2022/08/19
2.4K0
React报错之Encountered two children with the same key
原文链接:https://bobbyhadz.com/blog/react-encountered-two-children-with-the-same-key[1]
chuckQu
2022/08/19
2.2K0
React报错之Encountered two children with the same key
React报错之Objects are not valid as a React child
原文链接:https://bobbyhadz.com/blog/react-objects-are-not-valid-as-react-child[1]
chuckQu
2022/08/19
1.4K0
React报错之Objects are not valid as a React child
React技巧之中断map循环
原文链接:https://bobbyhadz.com/blog/react-map-break[1]
chuckQu
2022/08/19
5150
React技巧之具有空对象初始值的useState
原文链接:https://bobbyhadz.com/blog/react-typescript-usestate-empty-object[1]
chuckQu
2022/08/19
1.5K0
React技巧之将useState作为对象
原文链接:https://bobbyhadz.com/blog/react-type-usestate-object[1]
chuckQu
2022/08/19
9820
React报错之Invalid hook call
导致"Invalid hook call. Hooks can only be called inside the body of a function component"错误的有多种原因:
chuckQu
2022/09/20
2.7K0
React报错之Invalid hook call
React报错之map() is not a function
原文链接:https://bobbyhadz.com/blog/react-map-is-not-a-function[1]
chuckQu
2022/08/19
6200
React报错之map() is not a function
React技巧之将useState作为对象数组
原文链接:https://bobbyhadz.com/blog/react-typescript-usestate-empty-object
chuckQu
2022/08/19
2.8K0
React技巧之将useState作为对象数组
React技巧之将CSS作为props传递
原文链接:https://bobbyhadz.com/blog/react-pass-style-as-props-typescript[1]
chuckQu
2022/08/19
2.6K0
React技巧之将CSS作为props传递
React报错之Cannot assign to 'current' because a read-only property
原文链接:https://bobbyhadz.com/blog/react-cannot-assign-to-current-because-read-only-property[1]
chuckQu
2022/08/19
1.1K0
React报错之Cannot assign to 'current' because a read-only property
React技巧之在state数组中添加元素
原文链接:https://bobbyhadz.com/blog/react-push-to-state-array[1]
chuckQu
2022/08/19
2.8K0
React技巧之在state数组中添加元素
React报错之Property 'value' does not exist on type EventTarget
当event参数的类型不正确时,会产生"Property 'value' does not exist on type EventTarget"错误。为了解决该错误,将event的类型声明为React.ChangeEvent<HTMLInputElement> 。然后就可以通过event.target.value 来访问其值。
chuckQu
2022/09/20
1.7K0
React报错之Property 'value' does not exist on type EventTarget
React技巧之移除状态数组中的对象
原文链接:https://bobbyhadz.com/blog/react-remove-object-from-state-array[1]
chuckQu
2022/08/19
1.5K0
React技巧之移除状态数组中的对象
React技巧之useRef钩子
原文链接:https://bobbyhadz.com/blog/react-update-state-when-props-change[1]
chuckQu
2022/08/19
5930
React技巧之useRef钩子
React报错之Object is possibly null
原文链接:https://bobbyhadz.com/blog/react-useref-object-is-possibly-null[1]
chuckQu
2022/08/19
9110
React报错之Object is possibly null
推荐阅读
相关推荐
React技巧之将useState作为字符串数组
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验