2016-06-10 2 views
1

Я пытаюсь перебрать всех детей и добавить к ним опору. Проблема в том, что это работает для всех ближайших детей, но «внуки», если хотите, также не получают новые реквизиты. Вот фрагмент кода:Реагировать: создать новый элемент из всех детей при добавлении реквизита

React.Children.map(this.props.children, child => 
    React.createElement(
    child.type, 
    Object.assign({}, {...child.props}, {newProp: "test"}), 
) 
) 

Все непосредственные дети сохраняют свои реквизита, а также усиление prop.newProp и внуки также возвращаются, но без newProp. Передача детей в как так и не работает:

React.Children.map(this.props.children, child => 
    React.createElement(
    child.type, 
    Object.assign({}, {...child.props}, {newProp: "test"}), 
    child.props.children 
) 
) 

Edit:

  • Plain старые ReactJS ответы пожалуйста, без использования дополнительных библиотек, таких как Redux.
+0

Почему родитель должен распространять реквизит для внуков, а не для самих детей? –

+0

Он предназначен для распространения реквизита для детей. И внуки. – Nate

+4

И великие дети? Я думаю, что когда вы пытаетесь сделать что-то подобное, вы должны смотреть на «контекст», это то же самое, что и реквизит, но будет автоматически распространяться на всех детей, а все внуки ... взгляните на документ, это хорошая функция https: //facebook.github.io/react/docs/context.html –

ответ

0

Redux позволяет компонентам контейнера управлять и отображать его состояние, чтобы реагировать на реквизит презентационных компонентов.

+0

Не использовать Redux. Это связано с автономной библиотекой компонентов без Redux/Flux или других магазинов. – Nate

1

Так что я сказал, что это ответ. Вы можете использовать функцию context, чтобы разоблачить некоторые реквизиты для всех детей, не передавая их детям, внукам и т. Д.

В соответствии с документацией это экспериментальная функция, но многие библиотеки, такие как Redux, используют ее.

Просто убедитесь, что вы передаете из контекста, ИМО вы должны дважды подумать, прежде чем использовать его

0

Вот пример того, как добавить реквизит для всех детей в React компонента:

<div> 
    { React.cloneElement(this.props.children, { hello: 'world' }) } 
</div> 
+0

Это добавляет к всем уровням детей? Дети детей и т. Д.? – Nate

Смежные вопросы