В моем первом проекте Redux я совершил огромную ошибку. У меня были данные из API с глубоко вложенными данными. Я просто добавил эти данные в хранилище Redux без нормализации данных. Это приводит к раздутию кода и проблемам с производительностью. В этой статье я расскажу, как нормализовать данные и какие преимущества это дает React / Redux.

Ненормализованные данные

Чтобы сделать вещи конкретными, предположим, что мы создаем компонент для рендеринга статей:

Что, если мы хотим изменить информацию о пользователе?

Если вы просто измените одно из сообщений, компонент не будет обновляться новой информацией пользователя. Вы должны глубоко клонировать все данные сообщений или использовать неизменяемые структуры данных. Даже с ImmutableJS изменение глубинных структур может стать беспорядочным:

Нормализация

Мы можем выделить автора и каждого понравившегося в виде объекта user на карту всех пользователей. Затем замените каждый ссылкой на user вместо объекта.

Вы можете использовать библиотеку, такую ​​как normalizr, для нормализации данных на основе схемы. Это замечательно, если у вас мало контроля над своими данными, например, если вы используете внешний API.

Мы также должны обновить компонент User. Мы можем передать ему id, который ссылается на пользователя и получить объект пользователя из состояния Redux:

Преимущества

Теперь по этим данным легко обновить пользователя. Вы можете обновлять пользователей, не изменяя ни одно из сообщений.

Поскольку сообщения не меняются, компонент "Сообщение" не нуждается в обновлении, только компонент "Пользователь". Аналогичным образом переупорядочивание лайков включает только сортировку списка идентификаторов и не приводит к обновлению каждого компонента User. Это может привести к огромному выигрышу в производительности, если у вас много лайков.

Опубликовано 12 декабря 2017 г.

Первоначально опубликовано на hgogonis.me.