Какие параметры принимает useState?
Хуки
useState принимает один параметр — начальное состояние. Оно может быть значением или функцией-инициализатором.
Начальное значение
const [count, setCount] = useState(0);
const [user, setUser] = useState(null);
const [items, setItems] = useState([]);Используется только при первом рендере; при последующих аргумент игнорируется — возвращается сохранённое состояние. Если не передать ничего, начальное значение — undefined.
Функция-инициализатор (ленивая инициализация)
const [draft, setDraft] = useState(() => JSON.parse(localStorage.getItem('draft')));Если передана функция, React вызовет её один раз при монтировании и возьмёт результат. Зачем: обычный аргумент вычисляется на каждом рендере (и выбрасывается) — для дорогих операций (парсинг, чтение storage, генерация структуры) это лишняя работа.
Побочный эффект правила: чтобы хранить функцию в state, её оборачивают — useState(() => myFn), иначе React примет её за инициализатор.
Что useState НЕ принимает
- Второго аргумента нет (в отличие от useEffect/useMemo — там массив зависимостей).
- Колбэка «после обновления» (как второй аргумент this.setState в классах) тоже нет — реагировать на изменение нужно в useEffect.
Возвращает
Массив [значение, сеттер]; сеттер принимает новое значение или функцию (prev) => next.
Коротко для собеседования
Один параметр — начальное состояние: значение (используется только при монтировании) или функция-инициализатор useState(() => compute()), вызываемая один раз (для дорогой инициализации; из-за этого функцию-значение оборачивают). Второго аргумента и колбэка «после setState» у useState нет.