Hinweis versehen ich eine tiefer gehende Antwort hier
Laufzeit-Wrapper:
Es ist der idiomatischste Weg.
const Wrapper = ({children}) => (
<div>
<div>header</div>
<div>{children}</div>
<div>footer</div>
</div>
);
const App = () => <div>Hello</div>;
const WrappedApp = () => (
<Wrapper>
<App/>
</Wrapper>
);
Beachten Sie, dass dies children
eine "spezielle Requisite" in React ist. Das obige Beispiel ist syntaktischer Zucker und entspricht (fast)<Wrapper children={<App/>}/>
Initialisierungs-Wrapper / HOC
Sie können eine Komponente höherer Ordnung ( Higher Order Component, HOC) verwenden. Sie wurden kürzlich zum offiziellen Dokument hinzugefügt .
// 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);
Dies kann zu (wenig) besseren Leistungen führen, da die Wrapper-Komponente das Rendern mit shouldComponentUpdate einen Schritt vorausschließen kann, während bei einem Laufzeit-Wrapper die untergeordnete Requisite wahrscheinlich immer ein anderes ReactElement ist und ein erneutes Rendern verursacht auch wenn Ihre Komponenten PureComponent erweitern.
Beachten Sie, dass connect
Redux früher ein Laufzeit-Wrapper war, aber in ein HOC geändert wurde, da es unnötige Renderings vermeiden kann, wenn Sie die pure
Option verwenden (was standardmäßig der Fall ist).
Sie sollten während der Renderphase niemals ein HOC aufrufen, da das Erstellen von React-Komponenten teuer sein kann. Sie sollten diese Wrapper lieber bei der Initialisierung aufrufen.
Beachten Sie, dass die HOC-Version bei Verwendung von Funktionskomponenten wie oben keine nützliche Optimierung bietet, da zustandslose Funktionskomponenten nicht implementiert werden shouldComponentUpdate
Weitere Erklärungen hier: https://stackoverflow.com/a/31564812/82609
this.props.children
ist Teil der Komponenten-API und wird voraussichtlich auf diese Weise verwendet. Die Beispiele des React-Teams verwenden diese Technik, beispielsweise beim Übertragen von Requisiten und beim Sprechen über ein einzelnes Kind .