Ви можете використовувати 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 (дочірня, {ref: 'newRef'}) НЕ переосмислює реф.
Це було важливою особливістю потрапити в React 0.13, оскільки реквізит незмінний. Шлях до оновлення часто клонує елемент, але тим самим ви можете втратити посилання. Тому тут нам знадобився приємніший шлях оновлення. Під час оновлення викликів у Facebook ми зрозуміли, що нам потрібен цей метод. Ми отримали такі ж відгуки від громади. Тому ми вирішили зробити ще один RC перед остаточним випуском, щоб переконатися, що ми це отримаємо.
Ми плануємо врешті-решт знищити React.addons.cloneWithProps. Ми цього ще не робимо, але це хороша можливість почати думати про власні використання та розглянути можливість використання React.cloneElement. Ми обов’язково доставлятимемо випуск із повідомленнями про депресію, перш ніж ми його фактично видалимо, тому негайних дій не потрібно.
докладніше тут ...