@lite-fsm/core
@lite-fsm/core содержит runtime для описания машин, MachineManager, effects, actor templates, snapshot/hydration и публичные типы. Пакет не зависит от React и подходит для браузера, Node.js, worker-ов и тестов.
Установка
npm install @lite-fsm/coreДля reducer-ов в стиле Immer обычно добавляют middleware-пакет:
npm install @lite-fsm/core @lite-fsm/middleware immerEntry point
import { MachineManager, createEffect, createMachine, defineMachine } from "@lite-fsm/core";Основной импорт @lite-fsm/core экспортирует:
| Экспорт | Назначение |
|---|---|
createMachine | Типизированная фабрика полного machine config |
createConfig | Типизированная фабрика графа переходов |
createReducer | Типизированная фабрика reducer-а |
createEffect | Обёртка effect с every или latest семантикой |
createActorMeta | Замороженный ActorMeta для replacement/time-travel сценариев |
MachineManager | Runtime-store для нескольких машин |
Machine | Standalone pure machine |
defineMachine | Standalone-фабрика с зависимостями |
LiteFsmError | Ошибка runtime с кодом |
| types | FSMEvent, MachineConfig, MachinesState, MachineEvents, snapshot/actor/middleware types |
Минимальный пример
Reducer в примере написан в стиле Immer: он мутирует draft
stateи предполагает, чтоMachineManagerсоздан сimmerMiddleware. Без middleware reducer должен вернуть новый объект{ state, context }.
import { MachineManager, createMachine } from "@lite-fsm/core";
import { immerMiddleware } from "@lite-fsm/middleware/immer";
const toggle = createMachine({
config: {
OFF: { TOGGLE: "ON" },
ON: { TOGGLE: "OFF" },
},
initialState: "OFF",
initialContext: { count: 0 },
reducer: (slice, action, { nextState }) => {
slice.state = nextState;
if (action.type === "TOGGLE") {
slice.context.count += 1;
}
},
});
const manager = MachineManager({ toggle }, { middleware: [immerMiddleware] });
manager.transition({ type: "TOGGLE" });
manager.getState().toggle.state; // "ON"Что входит в core
- Граф переходов
configс явными targets и wildcard"*". - Reducer pipeline: default merge, custom reducer,
replaceReducer. - Effects: state effects, wildcard effects,
condition, nestedtransition. - Actor templates: spawn, routing через
meta, groups, terminal states. - Snapshot:
dehydrate,hydrate, предварительный расчёт состояния и обработчики версий схемы. - Middleware API:
getState,transition,replaceReducer,onTransition,condition.
Связанные разделы
Last updated on