ES6 数据校验

简介: ES6 class 数据校验import React, { PropTypes } from 'react';const propTypes = { // 验证不同类型的 JavaScript 变量 optionalArray: PropTypes.

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>
    );
  }
}
目录
相关文章
|
4月前
|
存储 人工智能 前端开发
🔓AI赋能开源:如何借助MCP快速解锁开源项目并提交你的首个PR
本篇文章介绍了如何利用AI工具降低开源项目贡献门槛,加速从项目理解到代码提交的过程。通过GitDiagram工具,可将GitHub仓库转化为交互式架构图,清晰展示项目结构,如Dify项目的部署、前端、核心服务及外部集成等层次。接着,借助GitMCP工具,将项目转化为AI助手的知识库,实现精准代码导航与开发辅助。例如,在Cursor中配置MCP服务后,AI能快速定位文件并分析接口结构,大幅提升开发效率。尽管MCP存在token消耗等问题,但其生态发展已展现出AI在实际开发中的巨大潜力。
145 5
|
4月前
|
边缘计算 弹性计算 API
|
7月前
|
存储 Android开发 索引
鸿蒙特效教程10-卡片展开/收起效果
本教程将详细讲解如何在HarmonyOS中实现卡片的展开/收起效果,通过这个实例,你将掌握ArkUI中状态管理和动画实现的核心技巧。
209 6
鸿蒙特效教程10-卡片展开/收起效果
|
7月前
|
存储 算法 UED
鸿蒙特效教程07-九宫格幸运抽奖
在移动应用中,抽奖功能是一种常见且受欢迎的交互方式,能够有效提升用户粘性。本教程将带领大家从零开始,逐步实现一个九宫格抽奖效果,适合HarmonyOS开发的初学者阅读。
172 2
鸿蒙特效教程07-九宫格幸运抽奖
|
安全 测试技术 开发者
通义千问2.5有哪些升级
通义千问2.5有哪些升级
1202 5
|
12月前
|
机器学习/深度学习 数据可视化 TensorFlow
使用Python实现深度学习模型:智能海洋监测与保护
使用Python实现深度学习模型:智能海洋监测与保护
272 1
|
弹性计算 监控 Cloud Native
云原生最佳实践系列 4:基于 MSE 和 SAE 的微服务部署与压测
通过MSE(微服务引擎)、SAE(Serverless应用引擎)、ARMS(应用监控服务)、PTS(性能测试服务)等产品,实现微服务的无服务化部署、监控和弹性伸缩。
915 108