Skip to content

消息城词典 ​

这里是全书所有术语的总目录。看书时忘了哪个词,就来这一页查。

词典会随书慢慢长大:每章出现新词,这一页就会同步更新。

核心对象 ​

信号 (signal) ​

会变化的消息源,是消息城里一切消息的起点。就像小铃的报纸——一变,所有订阅它的人都要知道。

小例子
js
const count = signal(1);  // 造一个信号,初始值是 1
count();    // 读:得到 1
count(2);   // 写:改成 2,所有依赖它的人都会收到通知

计算值 (computed) ​

根据别的信号算出来的消息。它是消息城里的中转站:平时不干活,只有被问到(被读取)时才去核实并重新计算。

小例子
js
const money = computed(() => count() * 2);  // count 一变,money 自动重算

自动反应 (effect) ​

订阅了若干信号的代码,信号一变它就自动重新执行。消息城里它是订阅听众——订了报,报纸一改就自动看到新内容。

小例子
js
effect(() => console.log(money()));  // count 一变,这行代码自动再跑一遍

依赖 (dep) ​

一条消息的来源。money 靠 count 算出来,count 就是 money 的依赖。

订阅者 (sub) ​

正在听某条消息的节点。谁在读 count,谁就是 count 的订阅者。

机制 ​

传播 (propagate) ​

告诉所有订阅者:"你依赖的消息可能有变!"消息城里的发通知环节。

核实 (checkDirty) ​

被问到的时候,逐一确认依赖的消息是不是真的变了,变了才重算。消息城里的打电话确认。

浅传播 (shallowPropagate) ​

把一层听众的"待核实"章升级成"过期"章,只传一层,不重算、不排队。

攒批 (batch) ​

把一批消息变更攒起来,等攒够了再一次发刊通知。避免同一轮里反复通知。

停刊 (unwatched) ​

一个计算值没人订阅了,就不再被关注、可以歇工。

手动发刊 (trigger) ​

外部直接改了消息内容(绕过信号赋值)后,手动发起一次传播通知。

捂住耳朵 (untracked) ​

读信号但不登记订阅——"看一眼,不想订阅"。

换耳朵 (setActiveSub) ​

收一个新耳朵、返回旧耳朵——untracked 的地基。

内部零件 ​

记录"谁订阅了谁、订的是第几期"的连接记录。消息城里的订阅合同。

期号 (version) ​

消息的第几期。连接线靠期号认出"这条订阅还是不是最新的"。

过期 (Dirty 标志) ​

消息可能已经旧了、需要重新算。代码里保留英文 Dirty。

待核实 (Pending 标志) ​

节点收到了"可能有变"的通知,但还没去确认。代码里保留英文 Pending。

正在跑 (RecursedCheck 标志) ​

节点正在执行自己的规则/函数。传播看到它就不追着通知,防止"自己改自己"的死循环。代码里保留英文 RecursedCheck。

递归记号 (Recursed 标志) ​

节点跑着的时候挨过写。下一轮传播会摘掉它、重新通知。代码里保留英文 Recursed。

避用词速查 ​

有时候"这个"和"那个"都叫一个名字,反而会乱。书里统一用上面的词,这些词不用:

说这个词的时候其实书里叫
变量、响应式值信号
派生值、缓存值计算值
副作用(像药瓶标签)、监听器自动反应
上游、数据源依赖
下游、监听者订阅者
广播、派发传播
脏检查("脏"对小孩奇怪)核实
链接(会想到网页)连接线
版本期号
批处理攒批
取消监听停刊
触发手动发刊