React: Redux Toolkit
Теория: Нормализация данных в Redux
Большинство приложений работают с данными, которые имеют вложенную структуру. Например, у постов в блоге есть автор и комментарии. У комментариев тоже есть авторы и могут быть лайки:
Работать с такой структурой напрямую тяжело, потому что:
- Сложно обновлять данные, потому что внутри структуры некоторые из них дублируются — например, author
- Чем больше вложенность, тем сложнее становится логика редьюсеров
Правильный подход при работе с Redux — воспринимать его как реляционную базу данных. Данные внутри хранилища должны быть нормализованы. При таком взгляде каждый слайс, работающий с набором сущностей, можно воспринимать как отдельную таблицу в базе данных.
Основные принципы организации данных в хранилище можно сформулировать так:
- Каждый тип сущности хранится в своем редьюсере
- Коллекция сущностей одного типа хранится в виде объекта, где ключи — идентификаторы объектов, а значения — сами объекты
- Порядок данных в объекте задается отдельным массивом, состоящим только из идентификаторов
- Данные ссылаются друг на друга только по идентификаторам
Рассмотрим такой пример:
Теперь данные нормализованы. Каждый тип сущности хранится в своем собственном редьюсере. Объект entities хранит сами сущности, а ids — идентификаторы. Мы получим такие преимущества:
- Данные не повторяются, поэтому можно поменять только одно место при их изменении
- Редьюсеры не имеют вложенности
- Данные в таком виде легко извлекать и модифицировать
Теперь посмотрим, как это выглядит внутри слайсов:




