Вы можете использовать React.cloneElement
, лучше узнать, как это работает, прежде чем начать использовать его в своем приложении. Это введено в React v0.13
, читайте дальше для получения дополнительной информации, так что кое-что вместе с этой работой для вас:
<div>{React.cloneElement(this.props.children, {...this.props})}</div>
Итак, приведите строки из документации React, чтобы вы могли понять, как все это работает и как их использовать:
В React v0.13 RC2 мы представим новый API, похожий на React.addons.cloneWithProps, с этой подписью:
React.cloneElement(element, props, ...children);
В отличие от cloneWithProps, эта новая функция не имеет никакого волшебного встроенного поведения для слияния стиля и className по той же причине, по которой у нас нет этой функции от TransferPropsTo. Никто не уверен, что именно представляет собой полный список волшебных вещей, что затрудняет анализ кода и повторное использование, когда стиль имеет другую сигнатуру (например, в предстоящем React Native).
React.cloneElement почти эквивалентен:
<element.type {...element.props} {...props}>{children}</element.type>
Однако, в отличие от JSX и cloneWithProps, он также сохраняет ссылки. Это означает, что если вы получите ребенка с опорой на него, вы не сможете случайно украсть его у своего предка. Вы получите ту же ссылку, прикрепленную к вашему новому элементу.
Один из распространенных способов - нанести на карту своих детей и добавить новую опору. Было много сообщений о том, что cloneWithProps теряет ссылку, что усложняет анализ вашего кода. Теперь, следуя тому же шаблону с cloneElement, будет работать как положено. Например:
var newChildren = React.Children.map(this.props.children, function(child) {
return React.cloneElement(child, { foo: true })
});
Примечание: React.cloneElement (child, {ref: 'newRef'}) ДЕЛАЕТ переопределение ссылки, поэтому два родителя по-прежнему не могут иметь ссылку на одного и того же ребенка, если только вы не используете callback-refs.
Это была критическая особенность, чтобы войти в React 0.13, так как реквизит теперь неизменен. Путь обновления часто заключается в клонировании элемента, но при этом вы можете потерять ссылку. Поэтому нам нужен был более хороший путь обновления здесь. Когда мы обновляли сайты вызовов в Facebook, мы поняли, что нам нужен этот метод. Мы получили такие же отзывы от сообщества. Поэтому мы решили сделать еще один RC до финального релиза, чтобы убедиться, что мы это сделаем.
Мы планируем в конечном итоге отказаться от React.addons.cloneWithProps. Мы еще этого не делаем, но это хорошая возможность начать думать о ваших собственных применениях и подумать об использовании React.cloneElement. Мы обязательно отправим релиз с уведомлениями об устаревании до того, как фактически удалим его, поэтому никаких немедленных действий не требуется.
больше здесь ...