Notez que j'ai fourni une réponse plus approfondie ici
Enveloppe d'exécution:
C'est la manière la plus idiomatique.
const Wrapper = ({children}) => (
<div>
<div>header</div>
<div>{children}</div>
<div>footer</div>
</div>
);
const App = () => <div>Hello</div>;
const WrappedApp = () => (
<Wrapper>
<App/>
</Wrapper>
);
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 .
// Signature may look fancy but it's just
// a function that takes a component and returns a new component
const wrapHOC = (WrappedComponent) => (props) => (
<div>
<div>header</div>
<div><WrappedComponent {...props}/></div>
<div>footer</div>
</div>
)
const App = () => <div>Hello</div>;
const WrappedApp = wrapHOC(App);
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
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 .