Как написать useBooleanState с удобными действиями

Используйте useState и useCallback; toggle должен обновлять состояние функционально. Тогда ему не требуется замыкать value в зависимостях.

Короткий ответ

Что ответить на собеседовании

Используйте useState и useCallback; toggle должен обновлять состояние функционально. Тогда ему не требуется замыкать value в зависимостях.

Подробный разбор

Ответ с пояснениями

Условие

Реализуйте hook useBooleanState(initial = false), возвращающий {value, toggle, setTrue, setFalse}. Действия должны иметь стабильные ссылки, а toggle — работать с актуальным состоянием.

Ответ

Используйте useState и useCallback; toggle должен обновлять состояние функционально. Тогда ему не требуется замыкать value в зависимостях.

Реализация:

import { useState, useCallback } from 'react';
export function useBooleanState(initial = false) {
  const [value, setValue] = useState(initial);
  const toggle = useCallback(() => setValue(v => !v), []);
  const setTrue = useCallback(() => setValue(true), []);
  const setFalse = useCallback(() => setValue(false), []);
  return { value, toggle, setTrue, setFalse };
}

Initial используется при создании состояния, а не для автоматической синхронизации последующих props.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее