Производное состояние с ключом
Условие
Компонент показывает черновик комментария к посту. При смене postId черновик обнуляется, но введённый текст между сменами сохраняется. Менять сигнатуру нельзя - решай внутри.
Что проверяют тесты
хранит ввод
сбрасывает при смене поста
не сбрасывает на том же посте
Как подойти
Официально рекомендованный React способ подстроить состояние под пропс без useEffect: сравнение с предыдущим значением прямо в рендере. Это выглядит странно, но работает корректно - React немедленно перезапускает рендер того же компонента, не трогая детей, и лишнего кадра не возникает. Через useEffect пользователь на один кадр увидел бы старый черновик. Когда сбрасывается всё состояние целиком, вместо этого проще сменить key.
Подсказки: 2
- Сравни пропс с его же значением из прошлого рендера, сохранённым в состоянии.
- Обновление состояния прямо в теле рендера допустимо, если оно условное и сразу же перезапускает рендер.
Решите в тренажёре
Редактор с автотестами прямо в браузере. Можно решить спокойно, вслух или под таймером, как на собесе.
Термины по теме
Ещё по теме «Состояние и useState/useReducer»
- Производное значение
- Стабильность dispatch
- Батчинг
- Ленивая инициализация state
- Функциональный апдейтер
- useReducer
- Апдейтер вперемешку со значением
- Ленивая инициализация