React-propTypes理解

举报
林太白 发表于 2025/03/11 10:32:28 2025/03/11
【摘要】 React-propTypes理解

React-propTypes理解和使用

👉认识

propTypes 是 React 中的一种用于类型检查的机制,用于验证组件的props是否符合预期类型,也就是我们认为的传入的参数类型是否正确。

  最初作为 React 的一部分在 React 0.14 版本中引入的
  
  直到 React 15.5 版本,React 团队将 propTypes 移到一个独立的包中,并且开始鼓励开发者通过安装 prop-types 包来使用它

👉安装使用

🍆使用步骤

1. 安装包 prop-types(yarn add prop-types/ npmi props-types)
2. 导入 prop-types包
3. 使用组件名.propTypes=来给组件的props添加校验规则

上面的部分其实就是我们propTypes的代码和写法:

// 完整写法
import PropTypes from 'prop-types';

const App = ({ colors }) => {
  // 你的组件代码
  return (
    <div>
      {colors.map((color, index) => (
        <p key={index} style={{ color }}>
          {color}
        </p>
      ))}
    </div>
  );
};
App.propTypes = {
  colors: PropTypes.array.isRequired,  // 定义 colors 必须是数组类型并且是必需的
};
export default App;

👉错误提示

我们简单看一下下面的代码错误的时候给我们的错误提示:

// 完整写法
import PropTypes from 'prop-types';

const App = ({ colors }) => {
  // 你的组件代码
  return (
    <div>
      {colors.map((color, index) => (
        <p key={index} style={{ color }}>
          {color}
        </p>
      ))}
    </div>
  );
};
App.propTypes = {
  colors: PropTypes.array.isRequired,  // 定义 colors 必须是数组类型并且是必需的
};
export default App;

错误写法时候给我们的提示

import PropTypes from 'prop-types';
function App(props) {
  return (
    <h1>Hi, {props.colors}</h1>
  );
}

// 定义propTypes
App.propTypes = {
  // 约定colors属性为array类型
  // 如果类型不对,则报出明确错误,便于分析错误原因
  colors: PropTypes.array
};

export default App;

这个时候给我们的提示

👉 常见propTypes约束

  1. 常见类型:array、bool、func、number、object、string
  2. React元素类型:element
  3. 必填项:isRequired
  4. 特定结构的对象:shape(())

👉写法

// 常见类型

// 可选函数
optionalFunc: PropTypes.func,

// 必选函数
requiredFunc: PropTypes.func.isRequired,

// 特定结构的对象
optionalObjectWithShape: PropTypes.shape({
  color: PropTypes.string,
  fontSize: PropTypes.number
})

👉完整类型

约束地址

PropType 描述
PropTypes.string 字符串类型
PropTypes.number 数字类型
PropTypes.bool 布尔类型
PropTypes.array 数组类型
PropTypes.object 对象类型
PropTypes.func 函数类型
PropTypes.node 任意可渲染的内容(比如:字符串、数字、React 元素、数组等)
PropTypes.element React 元素类型
PropTypes.instanceOf(Class) 验证值是否为某个类的实例
PropTypes.oneOf([value1, value2, ...]) 验证值是否为指定的某一个值
PropTypes.oneOfType([type1, type2, ...]) 验证值是否匹配多个类型中的任意一个
PropTypes.arrayOf(type) 验证数组中的每一项是否符合指定类型
PropTypes.objectOf(type) 验证对象的每个值是否符合指定类型
PropTypes.shape({}) 验证对象的属性是否符合指定类型
PropTypes.any 任意类型

👉案例

import React from 'react';
import PropTypes from 'prop-types';
import ReactDOM from 'react-dom';

const App = (props) => {
  return (
    <div>
      <h1>props 校验:</h1>
    </div>
  );
};

// 添加 props 校验
App.propTypes = {
  a: PropTypes.number,  // 属性 a 的类型:数值 (number)
  fn: PropTypes.func.isRequired,  // 属性 fn 的类型:函数 (func) 并且为必填项
  tag: PropTypes.element,  // 属性 tag 的类型:React 元素 (element)
  filter: PropTypes.shape({  // 属性 filter 的类型:对象
    area: PropTypes.string,
    price: PropTypes.number,
  }),
};

ReactDOM.render(<App />, document.getElementById('root'));

👉默认值defaultProps

有时候我们需要一些默认值,当父组件没有传递 props 时,我们使用默认值defaultProps。

场景:分页组件每页显示条数
作用:给props设置默认值,在未传入props时生效

import React from 'react';
import ReactDOM from 'react-dom';

function App(props) {
  return (
    <div>
      此处展示props的默认值:{props.pagesize}
    </div>
  );
}

// 设置默认值
App.defaultProps = {
  pagesize: 10,  // 默认值为 10
};

ReactDOM.render(<App />, document.getElementById('root'));

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。