• react篇章-React Props-Props 验证


    React.PropTypes 在 React v15.5 版本后已经移到了 prop-types 库。

    <script src="https://cdn.bootcss.com/prop-types/15.6.1/prop-types.js"></script>

    Props 验证使用 propTypes,它可以保证我们的应用组件被正确使用,React.PropTypes 提供很多验证器 (validator) 来验证传入数据是否有效。当向 props 传入无效数据时,JavaScript 控制台会抛出警告。

    以下实例创建一个 Mytitle 组件,属性 title 是必须的且是字符串,非字符串类型会自动转换为字符串 :

    React 16.4 实例

     
    <!DOCTYPE html>
    <html>
    <head>
    <meta charset="UTF-8" />
    <title>菜鸟教程 React 实例</title>
    <script src="https://cdn.staticfile.org/react/16.4.0/umd/react.development.js"></script>
    <script src="https://cdn.staticfile.org/react-dom/16.4.0/umd/react-dom.development.js"></script>
    <script src="https://cdn.staticfile.org/prop-types/15.6.1/prop-types.js"></script>
    <script src="https://cdn.staticfile.org/babel-standalone/6.26.0/babel.min.js"></script>
    </head>
    <body>
    
    <div id="example"></div>
    <script type="text/babel">
    // var title = "zzzzw";
    var title = 123;
    class MyTitle extends React.Component {
      render() {
        return (
          <h1>Hello, {this.props.title}</h1>
        );
      }
    }
    
    MyTitle.propTypes = {
      title: PropTypes.string
    };
    ReactDOM.render(
        <MyTitle title={title} />,
        document.getElementById('example')
    );
    </script>
    
    </body>
    </html>

    React 15.4 实例

     
    <!DOCTYPE html>
    <html>
      <head>
        <meta charset="UTF-8" />
        <title>菜鸟教程 React 实例</title>
        <script src="https://cdn.staticfile.org/react/15.4.2/react.min.js"></script>
        <script src="https://cdn.staticfile.org/react/15.4.2/react-dom.min.js"></script>
        <script src="https://cdn.staticfile.org/babel-standalone/6.22.1/babel.min.js"></script>
      </head>
      <body>
          <div id="example"></div>
        <script type="text/babel">
        var title = "菜鸟教程";
        // var title = 123;
        var MyTitle = React.createClass({
          propTypes: {
            title: React.PropTypes.string.isRequired,
          },
    
          render: function() {
             return <h1> {this.props.title} </h1>;
           }
        });
        ReactDOM.render(
            <MyTitle title={title} />,
            document.getElementById('example')
        );
        </script>
      </body>
    </html>

    更多验证器说明如下:

     
    MyComponent.propTypes = {
        // 可以声明 prop 为指定的 JS 基本数据类型,默认情况,这些数据是可选的
       optionalArray: React.PropTypes.array,
        optionalBool: React.PropTypes.bool,
        optionalFunc: React.PropTypes.func,
        optionalNumber: React.PropTypes.number,
        optionalObject: React.PropTypes.object,
        optionalString: React.PropTypes.string,
     
        // 可以被渲染的对象 numbers, strings, elements 或 array
        optionalNode: React.PropTypes.node,
     
        //  React 元素
        optionalElement: React.PropTypes.element,
     
        // 用 JS 的 instanceof 操作符声明 prop 为类的实例。
        optionalMessage: React.PropTypes.instanceOf(Message),
     
        // 用 enum 来限制 prop 只接受指定的值。
        optionalEnum: React.PropTypes.oneOf(['News', 'Photos']),
     
        // 可以是多个对象类型中的一个
        optionalUnion: React.PropTypes.oneOfType([
          React.PropTypes.string,
          React.PropTypes.number,
          React.PropTypes.instanceOf(Message)
        ]),
     
        // 指定类型组成的数组
        optionalArrayOf: React.PropTypes.arrayOf(React.PropTypes.number),
     
        // 指定类型的属性构成的对象
        optionalObjectOf: React.PropTypes.objectOf(React.PropTypes.number),
     
        // 特定 shape 参数的对象
        optionalObjectWithShape: React.PropTypes.shape({
          color: React.PropTypes.string,
          fontSize: React.PropTypes.number
        }),
     
        // 任意类型加上 `isRequired` 来使 prop 不可空。
        requiredFunc: React.PropTypes.func.isRequired,
     
        // 不可空的任意类型
        requiredAny: React.PropTypes.any.isRequired,
     
        // 自定义验证器。如果验证失败需要返回一个 Error 对象。不要直接使用 `console.warn` 或抛异常,因为这样 `oneOfType` 会失效。
        customProp: function(props, propName, componentName) {
          if (!/matchme/.test(props[propName])) {
            return new Error('Validation failed!');
          }
        }
      }
    }
  • 相关阅读:
    继续学习AJAX
    最近在看AJAX
    selenium学习模拟键盘按键操作
    二十三。克隆
    二十五。继承
    十八。类的属性
    二十一。第四章综合例题
    二十四。继承
    十七。对JAVA中堆和栈的细致了解
    十六。方法调用以及传参
  • 原文地址:https://www.cnblogs.com/zzzzw/p/10462417.html
Copyright © 2020-2023  润新知