SuperAPI AI 工具集

mosaic-machine

前端与建站

查看项目

更新于 10-16 08:34

技能介绍

用途:Mosaic Machine 用于编写和消费 Mosaic 状态机,适合用 createMachine 编写状态机、建模多步骤流程,以及把状态机接入 React 组件。设计原则以 XState v5 为先:设计任何功能或改动 API 前,先对照 XState v5 的同类模式并对齐,不自行发明新 API 形状。

主要能力:核心导入位于 packages/ui/src/mosaic/machine/。主入口为 setup(预绑定 TContext 与 TEvent),以及 createActor、mockActor、useMachine、useActor、useSelector;较低层可用 createMachine、assign。setup<TContext, TEvent>() 返回 { createMachine, assign, fromPromise },其中 fromPromise 用于基于 Promise 的 invoke 配置,能把解析出的类型带入 onDone.actions 的 e.output。assign 的第二个类型参数按调用位置推断,因此无需导入 DoneInvokeEvent、ErrorInvokeEvent、AfterEvent 等类型。

使用方式:在每个机器文件顶部用 setup<TContext, TEvent>() 预绑定类型;上下文为扁平对象,可选字段默认 null;事件联合类型用 SCREAMING_SNAKE_CASE。需要异步依赖时用工厂函数返回 createMachine,否则直接用 createMachine。状态转移用 invoke 处理异步工作,用 assign 更新 context;状态节点可用 guard 拦截所有指向该状态的转移。React 侧:useMachine 在组件生命周期内拥有流程,useActor 绑定共享 actor,useSelector 按切片订阅(以 Object.is 比较)。测试可在纯 JS 中进行,用 createActor 驱动 start 与 send;mockActor 可到达不可达或瞬态状态;外部数据变化时可用 actor.recheck()。

限制与注意:不要在 actions 里做异步工作,action 返回的 Promise 会被丢弃;不要直接修改 context,应使用 assign;不要把“不可能状态”放进 context,应新增状态;不要在模块定义时捕获异步函数。useMachine 会通过 useLayoutEffect 保持 context 最新,onDone 触发一次于 final 状态。调试可用 useMachineLogger,但需在发布前移除。