javascript - react 冗余 Prop 验证

标签 javascript validation reactjs properties

在 React 中,您可以指定需要哪些 props 以及它们应该具有哪些类型。当未知的 prop 名称(例如在 propTypes 中未指定)传递给组件时,是否有可能显示验证警告?

最佳答案

有了高阶组件,一切皆有可能:

// This is not a full solution, merely a sketch of one way to do it
const OnlyValidProps = WrappedComponent => {
  return class extends React.Component {
    render() {
      const actualProps = Object.keys(this.props);
      const expectedProps = Object.keys(WrappedComponent.propTypes);
      const hasPropMisMatch = (
        actualProps.length != expectedProps.length ||
        !actualProps.every(key => expectedProps.contains(key))
      );
      if (hasPropMisMatch) {
        console.warn(`Props mismatch! expected: ${expectedProps} actual: ${actualProps}`);
      }
      return <WrappedComponent {...this.props} />;
    }
  };
}

// Usage
OnlyValidProps(class MyClass extends React.Component {
  static propTypes = {
    x: React.PropTypes.number,
    y: React.PropTypes.number
  }
});

关于javascript - react 冗余 Prop 验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39416512/

相关文章:

asp.net - 包含 div 的验证器文本 - 防止在验证器正常时显示

reactjs - react 环境变量.env返回未定义

Javascript:混合构造函数模式和揭示模块模式

javascript - 如何在 Angular 指令中使用 React 自定义包

javascript - 初学者 JavaScript,JSON 索引问题 : why is my (for . .. in) 脚本失败?

javascript - 有没有纯 Javascript X/HTML 验证器?

regex - Symfony2.0 使用正则表达式验证

javascript - 如何在 ReactJS 的 onScroll 事件中操作 DOM?

javascript - React-native:this.navigator.pop 不工作

javascript - 从 Knockout.js 选项数组中删除后重新初始化 Materialize.css 选择框