Comments 5
// Всё это выглядит весьма таинственно?
// На самом деле, всё не так уж и сложно, если в этом разобраться.
render() {
const children = React.Children.map(this.props.children,
(child, index) => {
return React.cloneElement(child, {
onSelect: () => this.props.onTabSelect(index)
});
});
return children;
}
Несложно становится, если сразу не писать ненужный мусор
render() {
return React.Children.map(this.props.children,
(child, index) => React.cloneElement(child, {
onSelect: () => this.props.onTabSelect(index)
});
);
}
В реальных проектах лучше этой магии с React.Children.map
и React.cloneElement
не делать. Допустим, есть фрагмент:
<Parent>
<Child />
</Parent>
Потом по каким-то причинам понадобилось завернуть компонент в дополнительный div:
<Parent>
<div><Child /></div>
</Parent>
Все сломалось! Child больше не получает необходимое свойство, и не может нормально работать.
Для передачи значения между компонентами есть способы получше: контекст или render prop.
Ладно бы <div/>
, это всё-таки будущий реальный тег, но обычно даже нельзя какой-нибудь HOC
навернуть, т.к. новонавешанные props
-ы потеряются. В зависимости от библиотеки там что-нибудь да навернётся. Какие-то библиотеки заменяют переданные им ноды на другие, какие-то пробрасывают дополнительные поля, о которых, может не знать HOC. В общем этот Children.map
может изрядно попить кровушки :)
оставаться на переднем крае React-разработки
Думаю лучше бы звучало как: «оставаться на передовой React-разработки».
Год, проведённый с React: выводы и рекомендации