ES6 数据校验

ES6 class 数据校验

import React, { PropTypes } from 'react';

const propTypes = {
  // 验证不同类型的 JavaScript 变量
  optionalArray: PropTypes.array,
  optionalBool: PropTypes.bool,
  optionalFunc: PropTypes.func,
  optionalNumber: PropTypes.number,
  optionalObject: PropTypes.object,
  optionalString: PropTypes.string,

  // 所有可以被渲染的对象:数字,字符串,DOM 元素或包含这些类型的数组。
  optionalNode: React.PropTypes.node,

  // 可以是一个 ReactElement 类型
  optionalElement: PropTypes.element,

  // 可以是某个组件的实例
  optionalMessage: PropTypes.instanceOf(Message),

  // 可以是一组值中其中的一个
  optionalEmun: PropTypes.oneOf(['News', 'Photos']),

  // 可以是一组类型中的一个
  optionalUnion: PropTypes.oneOfType([
    PropTypes.array,
    PropTypes.string,
    PropTypes.instanceOf(Message)
  ]),

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

  // 指定类型的属性构成的对象
  optionalObjectOf: React.PropTypes.objectOf(React.PropTypes.number),

  // 特定形状参数的对象
  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!');
    }
  }

  // 可以在最后加一个 isRequired,表明这个属性是必须的,否则会返回一个错误
  requiredFunc: PropTypes.func.isRequired
};

class Profile extends React.Component {
  render() {
    return (
      <div className="profile-component">
        {/* this.pros 是传入的属性 */}
        <h1>my name is { this.props.name }</h1>
        <h2>my age is { this.props.age }</h2>
      </div>
    );
  }
}

Profile.propTypes = propTypes;
export default Profile;

将 propTypes 写在类中

import React, { PropTypes } from 'react';

export default class Profile extends React.Component {
  static get propTypes() {
    return {
      name: PropTypes.string.isRequired,
      age: PropTypes.number.isRequired
    };
  }

  constructor(props) {
    super(props);
    this.state = { count: 0 };
    this.likeMe = this.likeMe.bind(this);
  }

  componentDidMount() {
    // 组件加载完成1秒之后,使 count 自动加1
    setTimeout(() => {
      this.likeMe();
    }, 1000);
  }

  likeMe() {
    let count = this.state.count;
    count += 1;
    console.log(count);
    this.setState({ count });
  }

  render() {
    return (
      <div className="profile-component">
        {/* this.pros 是传入的属性 */}
        <h1>my name is { this.props.name }</h1>
        <h2>my age is { this.props.age }</h2>
        <button onClick={this.likeMe}>Like Me</button>
        <h2>Like Me Count: { this.state.count }</h2>
      </div>
    );
  }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值