Выбор ответа Middle Архитектура состояния обновлено
Зачем нормализация
Вопрос
Пост показан и в ленте, и в «Избранном». Данные хранятся двумя массивами копий. После лайка в ленте счётчик в «Избранном» остался старым. Какое архитектурное решение устраняет причину?
Попробуйте сами
Выберите вариант, и откроется разбор.
Показать ответ и разбор
Коротко
Правильный ответ: Хранить посты нормализованно: по id, а списки как массивы id. Причина в двух копиях одной сущности.
Варианты ответа
- Хранить посты нормализованно: по id, а списки как массивы idправильный ответ
- После каждого лайка перезагружать страницу, чтобы всё обновилось
- Делать глубокое копирование обоих массивов при каждом изменении
- Использовать
useMemoдля обоих списков, чтобы они синхронизировались
Разбор
Причина в двух копиях одной сущности. Нормализация оставляет один источник правды: posts.byId[id], а ленты хранят только id. Перезагрузка лечит симптом и ломает UX. Глубокое копирование лишь умножает копии. useMemo кеширует вычисления, но не синхронизирует данные. В TanStack Query ту же задачу решают инвалидацией или setQueryData по всем затронутым ключам.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.