Никола Ланцони Проблема, о которой вы говорили, была совершенно другой. Сначала я дам некоторую ссылку.
Когда React необходимо отобразить родительский компонент (в вашем случае компонент App
), он вызовет метод shouldComponentUpdate()
каждого дочернего компонента (ChildComponent
в вашем случае). Если shouldComponentUpate()
вернет true
, будет отображаться дочерний компонент.
По умолчанию компоненты, унаследованные от React.Component
, ВСЕГДА возвращают true
для shouldComponentUpdate()
, поэтому всегда повторно визуализируются. Вот почему вы видите, что <ChildComponent/>
всегда отображается повторно. Чтобы решить эту проблему, у вас есть два варианта:
- В вашем
ChildComponent
переопределитеshouldComponentUpdate()
и выполните неглубокое сравнение между текущими и следующими реквизитами и вернитеfalse
, если реквизиты не изменились. - Наследуйте от
React.PureComponent
, который выполнит поверхностное сравнение за вас.
В этой истории я говорил следующее:
Если вы привяжете обработчик событий в
render()
(неправильный способ), даже если ваш компонент унаследован отPureComponent
, он будет без необходимости повторно отображаться из-за изменения привязки.
Вот почему нам нужно использовать функцию стрелки или, как сказано в комментариях, автоматическую привязку.