Existe-t-il un moyen de faire passer un composant dans un autre composant réactif? Je veux créer un composant de réaction de modèle et passer un autre composant de réaction afin de transclure ce contenu.
Edit: Voici un codepen reactJS illustrant ce que j'essaie de faire. http://codepen.io/aallbrig/pen/bEhjo
HTML
<div id="my-component">
<p>Hi!</p>
</div>
ReactJS
/**@jsx React.DOM*/
var BasicTransclusion = React.createClass({
render: function() {
// Below 'Added title' should be the child content of <p>Hi!</p>
return (
<div>
<p> Added title </p>
{this.props.children}
</div>
)
}
});
React.renderComponent(BasicTransclusion(), document.getElementById('my-component'));
javascript
reactjs
Andrew Allbright
la source
la source
this.props.children
fait partie de l'API du composant et devrait être utilisé de cette façon. Les exemples de l'équipe React utilisent cette technique, comme pour transférer des accessoires et pour parler d'un seul enfant .Notez que j'ai fourni une réponse plus approfondie ici
Enveloppe d'exécution:
C'est la manière la plus idiomatique.
Notez qu'il
children
s'agit d'un "accessoire spécial" dans React, et l'exemple ci-dessus est du sucre syntaxique et est (presque) équivalent à<Wrapper children={<App/>}/>
Wrapper d'initialisation / HOC
Vous pouvez utiliser un composant d'ordre supérieur (HOC). Ils ont été ajoutés récemment au document officiel .
Cela peut conduire à (peu) de meilleures performances car le composant wrapper peut court-circuiter le rendu une longueur d'avance avec shouldComponentUpdate, tandis que dans le cas d'un wrapper d'exécution, le prop enfant est susceptible d'être toujours un ReactElement différent et de provoquer des re-rendus même si vos composants étendent PureComponent.
Notez que
connect
Redux était auparavant un wrapper d'exécution mais a été changé en HOC car cela permet d'éviter des rendus inutiles si vous utilisez l'pure
option (ce qui est vrai par défaut)Vous ne devez jamais appeler un HOC pendant la phase de rendu car la création de composants React peut être coûteuse. Vous devriez plutôt appeler ces wrappers à l'initialisation.
Notez que lorsque vous utilisez des composants fonctionnels comme ci-dessus, la version HOC ne fournit aucune optimisation utile car les composants fonctionnels sans état n'implémentent pas
shouldComponentUpdate
Plus d'explications ici: https://stackoverflow.com/a/31564812/82609
la source
la source
Facebook recommande l'utilisation de composants sans état Source: https://facebook.github.io/react/docs/reusable-components.html
la source
Vous pouvez le passer comme un accessoire normal:
foo={<ComponentOne />}
Par exemple:
la source
je préfère utiliser l'API intégrée React:
alors vous pouvez remplacer le div wrapper avec ce que vous voulez:
la source
Vous pouvez passer un composant via. les accessoires et le rendre avec interpolation.
Vous passeriez alors un
prop
appeléchild
, qui serait un composant React.la source
this.props.children
comme suggéré dans une autre réponse, vous pouvez écrire les enfants comme des enfants au lieu de attrs.<div child={this.props.child />
.React.DOM.div
, comme tous les composants principaux, utilise lechildren
tableau. Regardez comment il est utilisé dans votreHello
composant, il utilise déjà plusieurs enfants.Tard dans le jeu, mais voici un puissant modèle HOC pour remplacer un composant en le fournissant comme accessoire. C'est simple et élégant.
Supposons que le
MyComponent
rendu soit unA
composant fictif mais que vous souhaitiez autoriser un remplacement personnalisé deA
, dans cet exempleB
, qui encapsuleA
un<div>...</div>
et ajoute également "!" à l'accessoire texte:la source
En fait, votre question est de savoir comment écrire un composant d'ordre supérieur (HOC). L'objectif principal de l'utilisation de HOC est d'empêcher le copier-coller. Vous pouvez écrire votre HOC en tant que composant purement fonctionnel ou en tant que classe, voici un exemple:
Si vous souhaitez écrire votre composant parent en tant que composant basé sur une classe:
Si vous souhaitez écrire votre parent en tant que composant fonctionnel:
la source
Voici un exemple d'un composant de réaction List parent et dont les accessoires contiennent un élément React. Dans ce cas, un seul composant React Link est transmis (comme indiqué dans le rendu dom).
la source
Oui, vous pouvez le faire en utilisant des accessoires, vous pouvez passer des données de composant en tant qu'objet comme des accessoires, puis à l'intérieur du composant, vous pouvez importer un autre composant et lier dynamiquement avec des données prpps. en savoir plus sur le composant react
la source