Я использую React.Children.map()
в методе render()
компонента, чтобы добавить различные реквизиты для детей. Мне также нужно подключиться к событию каждого ребенка onLayout
. Я использую функцию стрелки для этого с единственной целью передачи дополнительного параметра в функцию обработчика событий, которая уникально идентифицирует каждого дочернего элемента в списке (key
опора, исходящая от самих дочерних элементов).
Однако в моем случае использования будет много повторных визуализаций, и передача функции стрелки (которая создает новую функцию каждый раз, когда происходит повторная визуализация) может вызвать утечки памяти или проблемы с производительностью.
class ChildsParent extends React.Component {
// ... constructor, ect.
handleOnLayout = (key, evt) => { /* ... do things on each uniquely identified child */ }
render = () => {
return <View>
{React.Children.map(this.props.children, (child, index) => {
return React.cloneElement(child, {
...child.props,
/* additional props */
// this arrow function could cause performance issues
onLayout: (evt) => { this.handleOnLayout(child.props.key, evt); }
})
})}
</View>
}
}
В качестве решения я тестировал код, который использовал поле target
параметра SyntheticEvent
из события onLayout (evt
). К настоящему моменту я провел несколько тестов, и в каждом тесте значение этого поля оставалось неизменным при повторных рендерингах детей.
Но насколько реально поле target
?
Гарантируется ли, что это поле будет таким же после повторного рендеринга того же элемента?
Я действительно хочу убедиться, что значение этого значения остается постоянным в течение всего жизненного цикла каждого дочернего элемента (не рендеринга родительского элемента или условного рендеринга, поскольку монтирование и размонтирование, скорее всего, приведет к изменению) .
У кого-нибудь есть больше знаний, чтобы помочь мне понять это? Документы React, по-видимому, не дают более подробной информации или гарантий в отношении реквизитов SyntheticEvent, за исключением того, что каждый SyntheticEvent будет иметь реквизиты, указанные в документах.