知识合集

哈喽,我是颜sir,询盘自由网背后的人。做网络营销快6年,运气不错,实现了财务自由,目前全职在家钻研更多赚钱方法。在钻研过程中,我发现网上几乎找不到优质的中文资源。我深知新手入门需经历痛苦挣扎,所以创建了询盘自由网,把我知道的分享给你。

Effect 的 fiber 什么时候该脱离父级?

forkChild 默认让子 fiber 跟着父一起结束。需要任务跑完不受父影响时,用 forkDetach,或把子 fiber 绑到 Scope 上。讲清各自的归属和该由谁负责生命周期。

Effect 里中断和失败有什么区别?

在 Effect 里,中断是独立于失败和缺陷的第三种结局,表示有人不再需要结果。讲清它在 Exit 里的表示、为什么不该重试或上报,以及中断为什么是协作式的。

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 与组件一行都不用改。