DOM и React Middle Состояние и useState/useReducer обновлено

Ленивая инициализация состояния

Условие

Начальное значение считает дорогая функция expensive(). Она должна вызваться ровно один раз за всё время жизни компонента, а не на каждый рендер.

Что проверяют тесты

  • начальное значение взято из функции

  • вызывается один раз

Как подойти

useState(init) вычисляет аргумент на каждом рендере и выбрасывает результат; useState(() => init) вызывает функцию только при первом рендере. То же различие у useRef - там ленивой формы нет, поэтому дорогую инициализацию туда не кладут.

Подсказки: 2
  1. useState(expensive()) вызовет функцию на каждом рендере.
  2. useState принимает саму функцию - тогда он вызовет её только при монтировании.

Решите в тренажёре

Редактор с автотестами прямо в браузере. Можно решить спокойно, вслух или под таймером, как на собесе.