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)

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

订阅者 (sub)

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

机制

传播 (propagate)

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

核实 (checkDirty)

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

浅传播 (shallowPropagate)

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

攒批 (batch)

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

停刊 (unwatched)

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

手动发刊 (trigger)

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

捂住耳朵 (untracked)

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

换耳朵 (setActiveSub)

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

内部零件

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

期号 (version)

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

过期 (Dirty 标志)

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

待核实 (Pending 标志)

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

正在跑 (RecursedCheck 标志)

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

递归记号 (Recursed 标志)

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

避用词速查

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

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