Вы можете использовать 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, эта новая функция не имеет встроенного волшебного поведения для слияния стиля и имени класса по той же причине, по которой у нас нет этой функции из 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, поскольку свойства теперь неизменяемы. Путь обновления часто заключается в клонировании элемента, но при этом вы можете потерять ссылку. Следовательно, здесь нам нужен был более удобный способ обновления. Когда мы обновляли call-сайты в Facebook, мы поняли, что нам нужен этот метод. Мы получили такие же отзывы от сообщества. Поэтому мы решили сделать еще один RC перед финальным выпуском, чтобы убедиться, что мы это получим.
Мы планируем в конечном итоге отказаться от React.addons.cloneWithProps. Мы пока этого не делаем, но это хорошая возможность подумать о собственном использовании и подумать об использовании вместо него React.cloneElement. Мы обязательно отправим выпуск с уведомлениями об устаревании, прежде чем мы действительно удалим его, поэтому никаких немедленных действий не требуется.
подробнее здесь ...
person
Alireza
schedule
12.06.2017
React.Children.map()
. Подробнее см. Как передать реквизиты {react.children} - person Victor Ofoegbu   schedule 26.05.2021