Запретить компоненту / чистому компоненту со стилизованными компонентами повторно отображать все элементы после изменения состояния

После добавления компонентов стиля в этот пример мы заметили, что наш компонент списка обновляет все, когда изменяется только один элемент в состоянии.

Подсветки отрисовки списка (из инструментов разработки React) чрезмерны при добавлении / удалении одной записи. Удаляется / добавляется один элемент, затем выделяются все элементы.

Запретить компоненту / чистому компоненту со стилизованными компонентами повторно отображать все элементы после изменения состояния

образцы кода

Вот пример правильного компонента списка (CategoryizedList.js)

import styled from "styled-components";

const Item = styled.li`
  color: #444;
`;

class CategorizedList extends PureComponent {
  render() {
    return (
      <div>
        {this.props.categories.map(category => (
          <ul>
            <li key = {this.props.catStrings[category]}>
              {this.props.catStrings[category]}
            </li>
            <ul>
              {this.props.items.map((item, index) =>
                item.category === category ? (
                  <div key = {item.label + index}>
                    <Item>{item.label}</Item>
                  </div>
                ) : null
              )}
            </ul>
          </ul>
        ))}
      </div>
    );
  }
}

Предпочтение

Я бы предпочел использовать PureComponent, чтобы shouldComponentUpdate()обрабатывается автоматически.

Вопрос

Как мы можем убедиться, что повторно визуализируются только измененные объекты в состоянии items?

согласно вашей ссылке doing a check on their props and state is lightning fast compared to the cost of re-rendering each one Какой удар производительности вы ожидаете получить в этом списке, где вам нужно применить этот подход?

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

Ответы 1

Если данные изменятся, представление будет повторно визуализировано. Это не должен быть дорогостоящим процессом, поскольку он происходит один раз при добавлении / удалении. Если вы обнаружите проблемы с производительностью, это может быть связано с чем-то другим.

В общем, это будет способ, которым вы можете иметь некоторый контроль над повторным рендерингом чистых компонентов: https://reactjs.org/docs/react-api.html#reactmemo

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