Выбор ответа Middle Архитектура состояния обновлено

Зачем нормализация

Вопрос

Пост показан и в ленте, и в «Избранном». Данные хранятся двумя массивами копий. После лайка в ленте счётчик в «Избранном» остался старым. Какое архитектурное решение устраняет причину?

Попробуйте сами

Выберите вариант, и откроется разбор.

Показать ответ и разбор

Коротко

Правильный ответ: Хранить посты нормализованно: по id, а списки как массивы id. Причина в двух копиях одной сущности.

Варианты ответа

  1. Хранить посты нормализованно: по id, а списки как массивы idправильный ответ
  2. После каждого лайка перезагружать страницу, чтобы всё обновилось
  3. Делать глубокое копирование обоих массивов при каждом изменении
  4. Использовать useMemo для обоих списков, чтобы они синхронизировались

Разбор

Причина в двух копиях одной сущности. Нормализация оставляет один источник правды: posts.byId[id], а ленты хранят только id. Перезагрузка лечит симптом и ломает UX. Глубокое копирование лишь умножает копии. useMemo кеширует вычисления, но не синхронизирует данные. В TanStack Query ту же задачу решают инвалидацией или setQueryData по всем затронутым ключам.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.