Есть ли способ передать один компонент в другой реагирующий компонент? Я хочу создать компонент реагирования модели и передать другой компонент реакции, чтобы включить этот контент.
Редактировать: Вот кодекс ручки JJ, иллюстрирующий то, что я пытаюсь сделать. http://codepen.io/aallbrig/pen/bEhjo
HTML
<div id="my-component">
<p>Hi!</p>
</div>
ReactJS
/**@jsx React.DOM*/
var BasicTransclusion = React.createClass({
render: function() {
// Below 'Added title' should be the child content of <p>Hi!</p>
return (
<div>
<p> Added title </p>
{this.props.children}
</div>
)
}
});
React.renderComponent(BasicTransclusion(), document.getElementById('my-component'));
javascript
reactjs
Эндрю Олбрайт
источник
источник
this.props.children
является частью API компонента и, как ожидается, будет использоваться таким образом. Примеры команды React используют эту технику, например, при передаче реквизита и при разговоре об одном ребенке .Обратите внимание, что я предоставил более подробный ответ здесь
Оболочка времени выполнения:
Это самый идиоматичный способ.
Обратите внимание, что
children
это «особая опора» в React, и приведенный выше пример является синтаксическим сахаром и (почти) эквивалентен<Wrapper children={<App/>}/>
Инициализация оболочки / HOC
Вы можете использовать Компонент высшего порядка (HOC). Они были добавлены в официальный документ недавно.
Это может привести к (немного) лучшей производительности, потому что компонент-оболочка может закорочить рендеринг на один шаг вперед с shouldComponentUpdate, в то время как в случае оболочки-оболочки времени выполнения дочерний объект всегда будет отличаться от ReactElement и вызывать повторные рендеры. даже если ваши компоненты расширяют PureComponent.
Заметь
connect
Redux раньше был оболочкой времени выполнения, но был изменен на HOC, потому что он позволяет избежать бесполезных повторных рендеров, если вы используете этуpure
опцию (которая по умолчанию верна)Вы никогда не должны вызывать HOC на этапе рендеринга, потому что создание компонентов React может быть дорогостоящим. Вы должны скорее вызывать эти оболочки при инициализации.
Обратите внимание, что при использовании функциональных компонентов, подобных описанным выше, версия HOC не обеспечивает никакой полезной оптимизации, поскольку функциональные компоненты без сохранения состояния не реализуют
shouldComponentUpdate
Больше объяснений здесь: https://stackoverflow.com/a/31564812/82609
источник
источник
Facebook рекомендует использовать компонент без сохранения состояния. Источник: https://facebook.github.io/react/docs/reusable-components.html.
источник
Вы можете передать его как обычный реквизит:
foo={<ComponentOne />}
Например:
источник
Я предпочитаю использовать встроенный API React:
тогда вы можете заменить div-обертку тем, что вы хотите:
источник
Вы можете передать компонент через. реквизит и рендеринг с интерполяцией.
Затем вы передадите
prop
вызванныйchild
, который будет компонентом React.источник
this.props.children
как предложено в другом ответе, вы можете написать детей как дети, а не attrs.<div child={this.props.child />
.React.DOM.div
Как и все основные компоненты, используетchildren
массив. Посмотрите, как он используется в вашемHello
компоненте, он уже использует несколько дочерних элементов.Позднее с игрой, но вот мощный шаблон HOC для переопределения компонента, предоставляя его в качестве опоры. Это просто и элегантно.
предполагать
MyComponent
рендерит вымышленныйA
компонент, но вы хотите разрешить пользовательское переопределениеA
, в этом примереB
, которое переноситсяA
в a,<div>...</div>
а также добавляет "!" к текстовой опоре:источник
На самом деле, ваш вопрос заключается в том, как написать компонент высшего порядка (HOC). Основная цель использования HOC - предотвращение копирования. Вы можете написать свой HOC как чисто функциональный компонент или как класс, вот пример:
Если вы хотите написать свой родительский компонент как компонент на основе классов:
Если вы хотите написать своего родителя как функциональный компонент:
источник
Ниже приведен пример родительского компонента реагирования List , в котором реквизиты содержат элемент реагирования. В этом случае передается только один компонент реакции Link (как видно из dom render).
источник
Да, вы можете сделать это, используя реквизиты, вы можете передавать данные компонента как объект, такой как реквизиты, а затем внутри компонента вы можете импортировать другой компонент и динамически связываться с данными prpps. узнать больше о компоненте реакции
источник