Обратите внимание, что я предоставил более подробный ответ здесь
Оболочка времени выполнения:
Это самый идиоматичный способ.
const Wrapper = ({children}) => (
<div>
<div>header</div>
<div>{children}</div>
<div>footer</div>
</div>
);
const App = () => <div>Hello</div>;
const WrappedApp = () => (
<Wrapper>
<App/>
</Wrapper>
);
Обратите внимание, что children
это «особая опора» в React, и приведенный выше пример является синтаксическим сахаром и (почти) эквивалентен<Wrapper children={<App/>}/>
Инициализация оболочки / HOC
Вы можете использовать Компонент высшего порядка (HOC). Они были добавлены в официальный документ недавно.
// 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);
Это может привести к (немного) лучшей производительности, потому что компонент-оболочка может закорочить рендеринг на один шаг вперед с shouldComponentUpdate, в то время как в случае оболочки-оболочки времени выполнения дочерний объект всегда будет отличаться от ReactElement и вызывать повторные рендеры. даже если ваши компоненты расширяют PureComponent.
Заметь connect
Redux раньше был оболочкой времени выполнения, но был изменен на HOC, потому что он позволяет избежать бесполезных повторных рендеров, если вы используете эту pure
опцию (которая по умолчанию верна)
Вы никогда не должны вызывать HOC на этапе рендеринга, потому что создание компонентов React может быть дорогостоящим. Вы должны скорее вызывать эти оболочки при инициализации.
Обратите внимание, что при использовании функциональных компонентов, подобных описанным выше, версия HOC не обеспечивает никакой полезной оптимизации, поскольку функциональные компоненты без сохранения состояния не реализуют shouldComponentUpdate
Больше объяснений здесь: https://stackoverflow.com/a/31564812/82609
this.props.children
является частью API компонента и, как ожидается, будет использоваться таким образом. Примеры команды React используют эту технику, например, при передаче реквизита и при разговоре об одном ребенке .