DOM и React Middle Состояние и useState/useReducer обновлено
Ленивая инициализация состояния
Условие
Начальное значение считает дорогая функция expensive(). Она должна вызваться ровно один раз за всё время жизни компонента, а не на каждый рендер.
Что проверяют тесты
начальное значение взято из функции
вызывается один раз
Как подойти
useState(init) вычисляет аргумент на каждом рендере и выбрасывает результат; useState(() => init) вызывает функцию только при первом рендере. То же различие у useRef - там ленивой формы нет, поэтому дорогую инициализацию туда не кладут.
Подсказки: 2
- useState(expensive()) вызовет функцию на каждом рендере.
- useState принимает саму функцию - тогда он вызовет её только при монтировании.
Решите в тренажёре
Редактор с автотестами прямо в браузере. Можно решить спокойно, вслух или под таймером, как на собесе.
Термины по теме
Ещё по теме «Состояние и useState/useReducer»
- Производное значение
- Стабильность dispatch
- Батчинг
- Ленивая инициализация state
- Функциональный апдейтер
- useReducer
- Апдейтер вперемешку со значением
- Ленивая инициализация