赖同学


  • 首页

  • 标签

  • 分类

  • 归档

  • 站点地图

  • 留言

  • 搜索

PropTypes

发表于 February 19, 2019|分类于 React|阅读次数: –
字数统计: 482|阅读时间: 3 min

PropTypes 类型检查

PropTypes 例子

import PropTypes from 'prop-types';
MyComponent.propTypes = {
    // 将属性声明为以下 JS 原生类型
    optionalArray: PropTypes.array,
    optionalBool: PropTypes.bool,
    optionalFunc: PropTypes.func,
    optionalObject: PropTypes.object,
    optionalNumber: PropTypes.number,
    optionalSting: PropTypes.string,
    optionalSymbol: PropTypes.symbol,

    // 可被渲染的元素(包括数字、字符串、子元素或者数组)
    optionalNode: PropTypes.node,

    // 一个 React 元素
    optionalElement: PropTypes.element,

    // 声明属性为某个类的实例,使用 JS 的 instanceof 操作符实现
    optionalMessage: PropTypes.instanceof(Message),

    // 限制属性值是某个特定值之一
    optionalEnum: PropTypes.oneOf(['News', 'Photos']),

    // 限制为列举类型之一的对象
    optionalUnion: PropTypes.oneOfType([
        PropTypes.string,
        PropTypes.number,
        PropTypes.instanceof(Message)
    ]),

    // 指定元素类型的数组
    optionalArrayOf: PropTypes.arrayOf(PropTypes.number),

    // 指定类型的对象
    optionalObjectOf: PropTypes.objectOf(PropTypes.number),

    // 指定属性及其类型的对象
    optionalObjectWithShape: PropTypes.shape({
        color: PropTypes.string,
        fontSize: PropTypes.number
    }),

    // 可以在任何 PropTypes 属性后面加上 'isRequired' 后缀,这样如果这个属性父组件没有提供时,会打印警告消息
    requiredFunc: PropTypes.func.isRequired,

    // 任何类型的数据
    requiredAny: PropTypes.any.isRequired,

    // 可以执行一个自定义验证器,在验证失败时返回一个 Error 对象而不是 'console.warn' 或抛出异常,在 oneOfType 中不起作用
    customProp: function(props, propName, componentName) {
        if (!/matchme/.test(props[propName])) {
            return new Error(
                'Invalid prop `' + propName + '` supplied to' +
                ' `' + componentName + '`. Validation failed.'
            );
        }
    },

    // 提供一个自定义的 `arrayOf` 或 `objectOf` 验证器,它应该在验证失败时返回一个 Error 对象。 它被用于验证数组或对象的每个值。验证器前两个参数的第一个是数组或对象本身,第二个是它们对应的键。
    customArrayProp: PropTypes.arrayOf(function(propValue, key, componentName, location, propFullName) {
        if (!/matchme/.test(propValue[key])) {
            return new Error(
                'Invalid prop `' + propFullName + '` supplied to' +
                ' `' + componentName + '`. Validation failed.'
            );
        }
    })
}

属性默认值

defaultProps 可以为 props 定义默认值。

class Greeting extends React.Component {
    render() {
        return ( <
            h1 > Hello, {
                this.props.name
            } < /h1>
        );
    }
}

// 为属性指定默认值:
Greeting.defaultProps = {
    name: 'Stranger'
};

// 渲染 "Hello, Stranger":
ReactDOM.render( <
    Greeting / > ,
    document.getElementById('example')
);
PropTypes
JavaScript设计模式——代理模式
JavaScript设计模式——策略模式
  • 文章目录
  • 站点概览
  1. 1.PropTypes 类型检查
    1. 1.PropTypes 例子
    2. 2.属性默认值
© 2018 — 2023赖彬鸿
1.6k
载入天数...载入时分秒...
0%