Согласно документации cloneElement()
React.cloneElement(
element,
[props],
[...children]
)
Clone и возвратите новый элемент React, используя элемент в качестве отправной точки. Получившийся элемент будет иметь реквизит оригинального элемента с новым реквизитом, сложенным неглубоко. Новые дети заменят существующих детей. ключ и ref из исходного элемента будут сохранены.
React.cloneElement()
почти эквивалентен:
{children} Однако он также сохраняет ссылки. Это означает, что если вы получите ребенка с рефлексией на нем, вы случайно не украдете его у своего предка. Вы получите тот же ref, что и ваш новый элемент.
blockquote>Итак, cloneElement - это то, что вы использовали бы для предоставления пользовательских реквизитов для детей. Однако в компоненте может быть несколько дочерних элементов, и вам нужно будет зациклиться на нем. Другие варианты подсказок позволяют вам сопоставить их с помощью
React.Children.map
. ОднакоReact.Children.map
, в отличие отReact.cloneElement
, изменяет ключи добавления Element и дополнительно.$
в качестве префикса. Проверьте этот вопрос для получения дополнительной информации: React.cloneElement внутри React.Children.map вызывает изменение ключей элементаЕсли вы хотите этого избежать, вместо этого вы должны пойти на
forEach
, напримерrender() { const newElements = []; React.Children.forEach(this.props.children, child => newElements.push( React.cloneElement( child, {...this.props, ...customProps} ) ) ) return (
{newElements}) }
Чтобы обновить LinearLayout или любое представление, вы используете свой метод invalidate()
.
Редактирование: если вы хотите переоценить представление, вызовите его requestLayout()
. Не забудьте также аннулировать его.
Также ваше баннерное объявление Admob нарушает свою Политику. Баннерные объявления не могут накладываться на контент приложения.