【问题标题】:React composition component proptypesReact 组合组件属性类型
【发布时间】:2017-01-17 17:48:28
【问题描述】:

我正在使用组合模式进行反应。因此,例如,我有这个简单的组件:

class Simple extends React.Component {
  render() {
    return <div>{this.props.text}</div>;
  }
}

Simple.propTypes = {
  text: React.PropTypes.string.isRequired
};

现在,我有了这个增强的组件:

class Enhanced extends React.Component {
  render() {
    return (
      <div>
        <div>Hi, I'm the enhanced version</div>
        <Simple {...this.props} />
      </div>
    );
  }
}

现在,如何为增强组件指定 proptypes?我可以这样做:

Enhanced.propTypes = {
  text: React.PropTypes.string.isRequired
};

但这并不好,因为我必须列出 Simple 组件的所有道具,并且每当我更改这些道具时,我都必须在 Enhanced 中更改它们

【问题讨论】:

    标签: reactjs react-proptypes


    【解决方案1】:

    propTypes 只是普通的 JS 对象。你可以随心所欲地创作它们:

    // Simple.js
    export const simplePropTypes = {
      text: React.PropTypes.string.isRequired
    }
    
    Simple.propTypes = simplePropTypes
    
    // Enhanced.js
    import Simple, { simplePropTypes } from './Simple'
    
    Enhanced.propTypes = {
      somethingElse: React.PropTypes.number,
      ...simplePropTypes
    }
    

    更新

    应该可以直接使用组件定义的propTypes

    Enhanced.propTypes = {
      somethingElse: React.PropTypes.number,
      ...Simple.propTypes
    }
    

    【讨论】:

    • 对于更新的答案,这是 es7 的功能吗?似乎不适合我
    • 直接从组件中解构 propTypes 对我也不起作用。你真的试过了吗?
    • 你不能对 props 使用扩展运算符,因为 eslint 无法识别它们。见github.com/yannickcr/eslint-plugin-react/issues/2195
    猜你喜欢
    • 2017-08-31
    • 1970-01-01
    • 2019-09-14
    • 1970-01-01
    • 1970-01-01
    • 2019-07-03
    • 2011-05-05
    • 2016-04-17
    • 2020-11-19
    相关资源
    最近更新 更多