Skip to Content
👋 Добро пожаловать в документацию lite-fsm!
APIReact API

React API

@lite-fsm/react помечен "use client". Модуль можно импортировать из SSR/RSC, но provider и hooks должны выполняться в клиентском дереве React.

Импорт

import { FSMContext, FSMContextProvider, FSMHydrationBoundary, defineMachine, useHydrateSnapshot, useManager, useSelector, useTransition, } from "@lite-fsm/react";

Компоненты

FSMContextProvider

<FSMContextProvider machineManager={manager}> <App /> </FSMContextProvider>
PropНазначение
machineManagerЭкземпляр MachineManager
persist?Массив FSMPersistLifecycle; провайдер запускает элементы после монтирования
childrenReact-поддерево

persist — массив объектов со структурным контрактом { start(): () => void }, поэтому @lite-fsm/react не зависит от @lite-fsm/persist. Элементы с getStatus() и subscribeStatus() доступны хукам @lite-fsm/persist/react в том же порядке; элементы только с контрактом жизненного цикла представлены как null. Если persist не передан или равен [], usePersistStatuses() возвращает [].

FSMHydrationBoundary

<FSMHydrationBoundary snapshot={snapshot} strategy="merge"> <Page /> </FSMHydrationBoundary>

FSMHydrationBoundary даёт useSelector() состояние, рассчитанное из снимка, уже во время отрисовки. После монтирования менеджер применяет тот же снимок в useLayoutEffect.

PropНазначение
snapshotMachineManagerSnapshot
strategy?Режим hydrate: частичное наложение или полный набор записей акторов
transitionAfterHydrate?Событие или массив событий после hydrate
childrenReact-поддерево

strategy имеет ту же семантику, что и в core hydrate(): это не глубокое объединение поля context и не глобальная замена состояния менеджера.

Хуки

HookЧто возвращает
useSelector(selector, equalityFn?)Выбранную часть состояния менеджера
useTransition()Функцию manager.transition
useManager()Текущий MachineManager
useHydrateSnapshot(snapshot, opts?)Применяет снимок в useLayoutEffect
function Counter() { const count = useSelector((state) => state.counter.context.count); const transition = useTransition(); return <button onClick={() => transition({ type: "INC" })}>{count}</button>; }

defineMachine

React-пакет экспортирует defineMachine для сценариев без общего MachineManager:

import { defineMachine } from "@lite-fsm/react";

Используйте его, когда машине не нужен общий MachineManager в контексте React. Для приложения с несколькими машинами используйте MachineManager + FSMContextProvider.

Типы

ТипНазначение
FSMContextTypeФорма контекста React
FSMContextProviderPropsProps провайдера
FSMPersistLifecycleLifecycle-контракт persist-провайдера
FSMHydrationBoundaryPropsProps границы гидратации
TypedUseSelectorHookAlias типизированного selector hook
TypedUseTransitionHookAlias типизированного transition hook
TypedUseManagerHookТипизированный manager hook alias

Подробное руководство: @lite-fsm/react.

Last updated on