Uwaga I pod warunkiem odpowiedzi bardziej szczegółowe tutaj
Opakowanie środowiska wykonawczego:
To najbardziej idiomatyczny sposób.
const Wrapper = ({children}) => (
<div>
<div>header</div>
<div>{children}</div>
<div>footer</div>
</div>
);
const App = () => <div>Hello</div>;
const WrappedApp = () => (
<Wrapper>
<App/>
</Wrapper>
);
Zauważ, że children
jest to „specjalna rekwizyt” w React, a powyższy przykład to cukier składniowy i jest (prawie) równoważny z<Wrapper children={<App/>}/>
Opakowanie inicjujące / HOC
Możesz użyć komponentu wyższego rzędu (HOC). Zostały ostatnio dodane do oficjalnego dokumentu .
// 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);
Może to prowadzić do (niewielkiej) lepszej wydajności, ponieważ komponent otoki może zwierać renderowanie o krok do przodu za pomocą funkcji shouldComponentUpdate, podczas gdy w przypadku otoki środowiska wykonawczego rekwizyt podrzędny prawdopodobnie będzie zawsze innym ReactElement i spowoduje ponowne renderowanie nawet jeśli twoje komponenty rozszerzają PureComponent.
Zauważ, że connect
Redux był opakowaniem środowiska wykonawczego, ale został zmieniony na HOC, ponieważ pozwala uniknąć niepotrzebnych ponownych renderowań, jeśli użyjesz tej pure
opcji (domyślnie jest to prawda)
Nigdy nie powinieneś wywoływać HOC podczas fazy renderowania, ponieważ tworzenie komponentów React może być kosztowne. Powinieneś raczej wywoływać te opakowania podczas inicjalizacji.
Należy zauważyć, że podczas korzystania z funkcjonalnych komponentów, takich jak powyżej, wersja HOC nie zapewnia żadnej użytecznej optymalizacji, ponieważ bezstanowe funkcjonalne komponenty nie są implementowane shouldComponentUpdate
Więcej wyjaśnień tutaj: https://stackoverflow.com/a/31564812/82609
this.props.children
jest częścią interfejsu API i oczekuje się, że będzie używany w ten sposób. Przykłady zespołu React wykorzystują tę technikę, na przykład podczas przenoszenia rekwizytów i mówienia o jednym dziecku .