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