@demlik/tea (英语)
一个TEA / Elm-Architecture TypeScript库,用于耐用,可重放的状态机器——一个纯还原器,每个主机适配器.
安装
pnpm add @demlik/tea
一次性依赖是 @standard-schema/spec,只显示类型包
为您安装. Cmd.define 带任何标准Schema, 所以把计划
您已经使用的库(按原样分割,或 Effect Schema 通过
Cmd.make 那个 @demlik/tea/effect 出口)。 东道主和
测试适配器骑在可选的同位素上, 您只为您使用的表面添加 :
react 编号 : react-dom (单位:千美元) ./react 钩子, ws (节点WebSocket子),
fast-check (单位:千美元) ./pbt (一) 物业检验助手, vitest (测试)
公用事业, effect (单位:千美元) ./effect 发动机),以及 @opentelemetry/api (单位:千美元)
./otel 页:1.
快速启动
A 类 机器 是纯数据: a init 还有一个 update 地图按键 Msg 类型.
run 驱动它,当它有影响 你手 run 页:1 interpret 地图
执行者; dispatch 折叠 a Msg· ; getState 读取当前
型号。您将模型和模型命名为 Msg 工会
一次,在 types;其他一切都是从机器本身推断出来的. 每一个
这些单词在 词汇表。 。 。 .
import { defineMachine } from "@demlik/tea";
import { run } from "@demlik/tea/promise";
type State = { readonly count: number };
type Msg = { readonly type: "increment" } | { readonly type: "reset" };
const counter = defineMachine({
types: { model: {} as State, msg: {} as Msg },
init: (loaded) => (loaded !== null ? [loaded, []] : [{ count: 0 }, []]),
update: {
increment: (s) => [{ count: s.count + 1 }, []],
reset: () => [{ count: 0 }, []],
},
});
const runtime = await run(counter, {}).ready;
await runtime.dispatch({ type: "increment" });
runtime.getState(); // { count: 1 }
两台引擎,一台机器
核心点是 @demlik/tea,每个 引擎 有自己的进入点。 一个机器
文件只导入核心,所以在任一引擎上都运行不变.
@demlik/tea——核心:defineMachine, (中文(简体) ),Cmd, (中文(简体) ),replay和类型。 这个 没有输入引擎.@demlik/tea/promise- 承诺引擎。 掌门人还相承.@demlik/tea/effect- 效应引擎(stable页:1 处理器 返回效果, 服务来自您的图层, 手柄的动词返回 键入出错的效果,关闭范围会打断任何内容 飞行.
在承诺引擎上运行一个机器
财务报告和审定财务报表 在效果引擎上
以同一机器文件为基础.
在一个父公司下运行许多机器
在效果引擎上启动儿童机器 spawn, (中文(简体) ), tell 财务报告和审定财务报表 stop。 。 。 .
来自0.15?
移徙指南
显示每一个已删除或重塑的 API,在前后.
反应
useMachine 从 @demlik/tea/react 返回时 [state, send]· ; send(msg) 返回时
undefined 马上,跑步 onError 有一次听到步步失败的声音 一个小姐
停止后停放或发送到水槽 DispatchDiscardedError
下级 phase: "discard"。 。 。 . useRuntime(run, { onError }) 使运行从
要么是引擎, 要么是手造的手柄, 带有承诺返回 dispatch,与
同样的 [state, send] 合同。 它的可选水槽听到丢弃物和手建
调度失败; 运行会保留自己的继器沉入.
useMachine 使用两个引擎的 run。用于效果引擎通过
runIn(runtime) 从 @demlik/tea/effect与您的 ManagedRuntime; 其编号
interpret 单元格返回 a Effect 联 合 国 subscribe 运行 a Stream,则
寿命周期( 在严格模式下每挂载一次运行, 子暂停于 <Activity>
隐藏,运行停止在卸载上)是相同的.
useRuntime(run, (model) => model.views[id]) 仅当所选值改变时, 才读取一部分并重新提交运行时的更新( r)Object.is) (中文(简体) ).
useBackgroundRuntime 从 @demlik/tea/extension 保留 { state, dispatch }, (中文(简体) ),
与虚空相归 dispatch。其可选性 onError 听到运输故障
下级 phase: "follow-up";背景步骤失败到背景运行.
提供方和 useDispatch 遵守同样的契约.
读取州为结果. 之前等待钩子的代码 dispatch
应删除等待; 需要等待的主机代码应拥有运行和使用
它的发动机 dispatch, (中文(简体) ), idle,或 done。 。 。 .
从 React 驱动机器 显示点击处理器、生命周期行为和出错汇.
重复性
与 fileStore 或者说 doStore,在命令运行前保存状态。 重新装入它.
agent.run 自动恢复待完成的工作; 自定义机器处理启动
留言。 如果在崩溃前没有保存效果, 效果可以再次运行 .
让机器耐用 财务报告和审定财务报表 理解还原与重玩。 。 。 .
文档
四个Diátaxis四角星生活在 docs/数字 :
- 教学 ——以学习为主的教训,通过造出真正的机器,带你通过图书馆.
- 如何向导 ——以目标为导向,完成具体工作.
- 参考文献 ——面向信息的API描述,每个公共单元生成.
- 解释 ——以理解为导向地讨论它如何运作以及它为什么被塑造成这样.
这个 词汇表 定义这些页面使用的每个词:Model、Msg、Cmd、Sub、Store等.
后面还有两块地表 供在图书馆工作的人使用
.patterns/ 如何塑造代码
.decisions/ 这就是为什么它是这样塑造的.