React Native SyntheticEvent - насколько надежно «целевое» поле? - PullRequest
0 голосов
/ 31 января 2020

Я использую 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 будет иметь реквизиты, указанные в документах.

...