2015-03-21 1 views
12

Quelle est la différence entre:React composant proptypes vs élément

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> 
    ); 
    } 
}); 

Je voudrais utiliser;

<Button content={<Icon name="heart" />} /> 

Dans quel cas dois-je utiliser l'autre?

Merci

Répondre

6

Je pense que vous devez rendre le bouton comme ceci:

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

Ensuite, vous pouvez l'utiliser avec un <Icon /> ou toute autre chose (texte ...):

<Button><Icon name="heart" /></Button> 

ou

<Button>anything</Button> 

Et puis le PropType correct dépend de ce que vous voulez permettre à l'intérieur de votre <Button /> (Mais je ne suis pas sûr React.PropTypes.component existe, ce n'est pas dans la documentation: http://facebook.github.io/react/docs/reusable-components.html)

+1

En effet, 'React.PropTypes.component' n'est pas dans le doc. C'est dans les extraits de Sublime JSX, mais ils peuvent être faux. Utiliser 'this.props.children' semble être une bien meilleure solution! –

+12

En fait, je pense que c'était dans les docs, mais puisque React 0.12 'React.PropTypes.component' a été renommé' React.PropTypes.element'. C'est certainement dans les docs maintenant. Alors qu'en général, l'utilisation d'enfants est généralement une bonne solution, il y a des moments où passer des composants nommés comme accessoires vous permettra de faire des choses que vous ne pouvez pas simplement en imbriquant des enfants. Par exemple, vous devrez peut-être composer un composant de page en transmettant des composants d'en-tête et de pied de page comme accessoires, ce qui vous permettra de restituer la page avec différents en-têtes et pieds de page. – nextgentech