React повторно визуализирует ненужный компонент после изменения свойства

Итак, у меня есть редуктор autocomplete, в котором хранятся все параметры, загруженные через react-select. Еще у меня есть два компонента - <Parent /> и <Modal />. Оба они подключены к состоянию редукции для получения реквизита autocomplete, потому что оба имеют свой собственный компонент <AsyncSelect />.

Select, который является потомком компонента <Parent />, получает параметры от редуктора: autocomplete.labels. Второй компонент Select, который является потомком <Modal />, получает параметры от редуктора: autocomplete.differentLabels.

Теперь, когда я использую Select, который является потомком Modal, весь компонент Parent перерисовывается, даже если нет jsx, зависящего от autocomplete. Это ожидаемое поведение? Из-за этого повторного рендеринга производительность снижается.

Может стоит разделить labels и differentLabels на отдельные редукторы?

Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Навигация по приложениям React: Исчерпывающее руководство по React Router
Навигация по приложениям React: Исчерпывающее руководство по React Router
React Router стала незаменимой библиотекой для создания одностраничных приложений с навигацией в React. В этой статье блога мы подробно рассмотрим...
Массив зависимостей в React
Массив зависимостей в React
Все о массиве Dependency и его связи с useEffect.
0
0
244
1

Ответы 1

Возможным решением может быть использование shouldComponentUpdate для сравнения текущих свойств с предыдущими и выполнения там некоторой логики, чтобы предотвратить ненужное обновление.

shouldComponentUpdate(nextProps, nextState) {
    if (this.props.myProp !== nextProps.myProp) {
        // Your logic
        return false;
    }
    return true;
}

Разве это не должно быть shouldComponentUpdate вместо componentDidUpdate ? Причина в том, что componentDidUpdate проверит наличие каких-либо изменений опоры, а затем что-то выполнит, тогда как shouldComponentUpdate просто проверит опору, а затем разрешит компоненту обновляться в зависимости от условия.

Amanshu Kataria 14.01.2019 17:31

Нужно ли писать собственный метод shouldComponentUpdate? Я пробовал использовать PureComponent, но это не сработало, как ожидалось. В моем компоненте есть только одно место, где я использую редуктор autocomplete, и это обратный вызов для react-select: const { labels } = this.props.autocomplete; callback(labels);.

papryk 14.01.2019 19:05

@AmanshuKataria Да, вы совершенно правы. Я должен был написать shouldComponentUpdate, но я не знаю, как я по ошибке набрал его как componentDidUpdate. Хорошо поймал. РЖУ НЕ МОГУ.

Hamed 14.01.2019 19:13

Другие вопросы по теме