标签:Effect

共 169 篇文章带有这个标签。

Effect 里 map 和 flatMap 怎么选?

函数返回普通值用 map,返回 Effect 用 flatMap;tap 做副作用并保留原值,andThen 是宽松写法。附 pipe 的用法。

Effect.run 应该放在哪里?

Effect.run* 只应出现在程序最外层的入口。讲清为什么在业务逻辑里运行 Effect 会丢掉依赖、取消和错误类型,以及 runPromise、runSync、runFork 怎么选。

Effect.fn 和 fnUntraced 怎么选?

三个函数都能把生成器函数体变成可复用的函数,差别在 span 和错误栈帧。这篇用同一段代码把差别摊开,给出应用层、库代码和热路径各自的选法。

Effect.fnUntracedEager 什么时候该用?

fnUntracedEager 在调用那一刻就同步执行函数体前缀,比 fnUntraced 更快,但副作用会提前发生。这篇给出它的执行时机和一条很窄的使用规则。

Effect 的四个 fork 该怎么选?

四个 fork 的区别只在子 fiber 挂在哪里、什么时候被中断。用一段会打印生命周期的代码把四个都跑一遍,再给出选择顺序。

Effect fork 之后为什么子 fiber 没有马上执行?

forkChild 返回时子 fiber 还没开始跑,先 fork 订阅者再发布消息会丢数据。讲清默认顺序、复现竞态,以及 startImmediately 能保证什么、不能保证什么。

Effect fork 的 uninterruptible 选项怎么用?

fork 的 uninterruptible 选项取值是 boolean 或 "inherit"。对比三种取值下 Fiber.interrupt 的行为,并说明它适合什么任务、代价是什么。

用 Effect 写 React 前端,状态该怎么管?

前端状态混乱,往往因为同一个事实被多处持有。这篇讲 Effect v4 里用 Atom 持有应用状态与异步数据的做法:装哪个包、Layer 怎么注入、写入后怎么自动刷新。

Effect Schema 怎么和 TanStack Form 配合做表单?

表单最容易出现多个所有者:输入、校验、提交状态各存一份。这篇讲怎么让 Schema 只定义一次校验规则,表单库管输入过程,Atom 管提交之后的应用逻辑。

Effect Atom 怎么把状态持久化到 localStorage?

偏好设置要跨刷新存活,直接读写 localStorage 会把不可信的数据放进应用。这篇讲用 Atom.kvs 加 Schema 做持久化,以及存储后端怎么替换。

Effect Atom 的测试怎么替换 Layer?

接口挂了界面怎么显示,通常要 mock 整个模块。用 Atom 的话,替换 registry 里的 runtime.layer 就行,业务 atom 与组件一行都不用改。

Effect 的 HTTP 路由怎么接到 Cloudflare Workers?

HttpRouter.toWebHandler 产出 Request 到 Promise<Response> 的函数,正好对上 Workers 的 fetch 入口。重点是把 env bindings 先包成 service,并在模块作用域构建一次。

Effect v4 里同一个 Layer 会被构建几次?

嵌套的 Effect.provide 会复用外层已构建的 Layer,兄弟 provide 却各自构建。用一个计数器 Layer 数出组合、嵌套、兄弟三种形态各构建几次。

为什么 Effect 应用只该 provide 一次 Layer?

嵌套的 Effect.provide 会自动复用 Layer,但兄弟 provide 不会。讲清为什么仍要先组合依赖图、入口只 provide 一次,以及怎么用计数器 Layer 写回归测试。

Effect 的 LayerMap、RcMap、Pool 该怎么选?

Effect 4.0.5 里有五个名字相近的资源 API。按「有没有 key、要不要共享、会不会过期」三个问题,几句话就能选对,同时标明哪几个是 unstable。