Tenga en cuenta que proporcioné una respuesta más detallada aquí
Contenedor de tiempo de ejecución:
Es la forma más idiomática.
const Wrapper = ({children}) => (
<div>
<div>header</div>
<div>{children}</div>
<div>footer</div>
</div>
);
const App = () => <div>Hello</div>;
const WrappedApp = () => (
<Wrapper>
<App/>
</Wrapper>
);
Tenga en cuenta que children
es un "accesorio especial" en React, y el ejemplo anterior es el azúcar sintáctico y es (casi) equivalente a<Wrapper children={<App/>}/>
Inicialización wrapper / HOC
Puede usar un Componente de orden superior (HOC). Se han agregado al documento oficial recientemente.
// 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);
Esto puede conducir a (poco) mejores rendimientos porque el componente contenedor puede cortocircuitar la representación un paso adelante con shouldComponentUpdate, mientras que en el caso de un contenedor de tiempo de ejecución, es probable que el elemento secundario sea siempre un ReactElement diferente y cause renders incluso si sus componentes extienden PureComponent.
Tenga en cuenta que connect
Redux solía ser un contenedor de tiempo de ejecución, pero se cambió a un HOC porque permite evitar representaciones inútiles si usa la pure
opción (que es verdadera por defecto)
Nunca debe llamar a un HOC durante la fase de renderizado porque crear componentes React puede ser costoso. Debería llamar a estos contenedores en la inicialización.
Tenga en cuenta que cuando se usan componentes funcionales como los anteriores, la versión HOC no proporciona ninguna optimización útil porque los componentes funcionales sin estado no se implementan shouldComponentUpdate
Más explicaciones aquí: https://stackoverflow.com/a/31564812/82609
this.props.children
es parte de la API del componente y se espera que se use de esta manera. Los ejemplos del equipo React usan esta técnica, como en la transferencia de accesorios y cuando se habla de un solo niño .