React proptypes组件与元素

Aug*_*ger 13 reactjs react-proptypes

有什么区别:

var Icon = React.createClass({
  propTypes: {
    name: React.PropTypes.string
  },
  render: function(){
    return (
      <span className={'glyphicon glyphicon-'+this.props.name}></span>
    );
  }
});

var Button = React.createClass({
  propTypes: {
    content: React.PropTypes.element // This one?
    content: React.PropTypes.component // Or this one?
  },
  render: function() {
    return (
       <button>{content}</button>
    );
  }
});
Run Code Online (Sandbox Code Playgroud)

我想用;

<Button content={<Icon name="heart" />} />
Run Code Online (Sandbox Code Playgroud)

在哪种情况下我应该使用另一个?

谢谢

al8*_*anp 7

我认为你应该像这样呈现Button:

var Button = React.createClass({
  render: function() {
    return (
       <button>{this.props.children}</button>
    );
  }
});
Run Code Online (Sandbox Code Playgroud)

然后你可以使用它<Icon />或其他任何东西(文本......):

<Button><Icon name="heart" /></Button>
Run Code Online (Sandbox Code Playgroud)

要么

<Button>anything</Button>
Run Code Online (Sandbox Code Playgroud)

然后正确的proptype取决于你想要允许的内容<Button /> (但我不确定React.PropTypes.component存在,它不在文档中:http://facebook.github.io/react/docs/reusable-components.html)

  • 实际上,我认为它是在文档中,但是因为React 0.12`React.PropTypes.component`被重命名为`React.PropTypes.element`.它现在肯定在文档中.虽然通常使用儿童通常是一个很好的解决方案,但在某些时候传递命名组件时,道具将允许您通过简单地嵌套儿童来做一些事情.例如,您可能需要通过将页眉和页脚组件作为道具传递来组成页面组件,然后允许您使用不同的页眉和页脚呈现页面(不需要为每个页面使用不同的页面组件). (17认同)