1.2 核心概念术语对照:从Hooks词汇表到Signals词汇表


1.2 核心概念术语对照:从 Hooks 词汇表到 Signals 词汇表

本节摘要:本节交付一张 React 到 Solid 的术语映射总表,并把映射分成"等价替换""形似神不似""Solid 独有"三类。最后用一个 console.log 实验验证 Solid 组件只执行一次——这是全册最重要的世界观校准点。

「响应式原语」是 Solid 文档里的高频词,指的是 Signal、Effect、Memo、Store 这几个最小可组合的积木。React 世界里没有完全对位的概念:Hooks 是"带状态的函数约定",而原语是"自带依赖追踪的值与计算单元"。词汇表能翻译,底层语义有位移——这正是本节要把映射分三类讲的原因,一把尺子量到底会出错。

总对照表

你在 React 的习惯 Solid 的对应物 映射性质 一句话差异
useState createSignal 形似神不似 setter 只通知订阅者,不重跑组件
useEffect createEffect 形似神不似 依赖自动追踪,没有依赖数组
useMemo createMemo 形似神不似 有真实依赖图的缓存,不是提示
useRef(存值) 组件内普通变量 等价替换 组件只跑一次,变量天然持久
useRef(拿节点) ref 属性 等价替换 同名不同机制,用法接近
useContext createContext + useContext 形似神不似 不会因上层 value 变化整体重渲染
React.memo 不需要 Solid 独有 无重渲染即无 memo 需求
列表 key For 组件 Solid 独有 按引用跟踪条目,自动移动节点
条件渲染三元 Show / Switch 等价替换 分支结构编译为定向插拔
Suspense Suspense 等价替换 配合 createResource 原生协作
lazy + import lazy 等价替换 返回组件可直接渲染
自定义 Hook 组合原语 等价替换 不受 Hook 调用规则约束
React.lazy 边界 ErrorBoundary 等价替换 用法接近,粒度更自由

表里出现频率最高的词是"形似神不似"。这四个字值得展开:所谓形似,是调用形状接近——createSignal(0)useState(0) 都返回一对函数;所谓神不似,是触达范围完全不同。React 的 setter 是"广播 + 重算"模型,Solid 的 setter 是"点对点投递"模型。后文每一章都在为这张表的某一行展开细讲,这里先建立整体感。

一个实验:组件到底跑几次

图:同一个组件在两个框架里的执行次数对照

图:同一个组件在两个框架里的执行次数对照

用代码验证。同一个计数按钮,先看 React 版本:

import { useState } from "react"; function Counter() { console.log("Counter 执行了"); // 每次点击都会打印 const [count, setCount] = useState(0); return <button onClick={() => setCount(count + 1)}>点击了 {count} 次</button>; }

再看 Solid 版本:

import { createSignal } from "solid-js"; function Counter() { console.log("Counter 执行了"); // 只在挂载时打印,之后再也不打 const [count, setCount] = createSignal(0); return <button onClick={() => setCount(count() + 1)}>点击了 {count()} 次</button>; }

逐行对比差异。第一处不同是读取方式:React 直接写 count(值在重跑时重新获得),Solid 写 count()(调用即读取,读取即登记订阅)。JSX 里那对圆括号是全册最重要的字符——它告诉运行时"此刻这个组件正在被读取依赖"。第二处不同是执行范围:点击后 React 从 Counter 函数头开始重跑,console.log 再打一条;Solid 只有 JSX 里那个文本节点对应的绑定函数被调用,函数体的其他代码纹丝不动。

推论马上就来了:既然组件只跑一次,"组件函数体内的局部变量"就是稳定持久的——这直接取代了 useRef 存值的用途;也解释了 props 为什么不能解构,解构发生在函数执行的那一刻,拿到的是当时的快照,后续更新再也同步不到。这个坑先埋在这里,第 3 章拆。

三类映射的学习策略

等价替换类(ref 属性、Suspenselazy)可以带着肌肉记忆直接用,迁移成本最低。形似神不似类是本册的重点,每一组都要在对应章节里用代码对照拆开:第 2 章负责 Signal、Effect、Memo、Store 四行,第 3 章负责自定义 Hook 与生命周期两行。Solid 独有类(React.memo 的缺席、For 的引用跟踪)意味着 React 里的一整套优化动作在 Solid 里直接作废——不是"用不上",而是"问题本身不存在了",第 4 章与第 8 章会反复回到这个话题。

💡 关键直觉:拿到任何一段 Solid 代码,先找圆括号。xxx() 出现在哪里,依赖就登记到哪里;更新也只会流回到哪里。读懂了圆括号,就读懂了细粒度响应式。

本节要点回顾

  • 映射表分三类:等价替换直接用,形似神不似逐个拆,Solid 独有的要么作废(memo)要么新学(For)。
  • 组件只执行一次是全部差异的根,console.log 实验是最快的校准手段。
  • count() 的圆括号是依赖登记点,也是更新投放点。

迁移者的第一周常见错觉

对照表之外,把第一周最容易产生的认知错觉也列出来,逐条配一句"实际情况"。

错觉一:"没有重渲染,那 state 改了谁来刷新界面?"实际情况:绑定制刷新——编译器为每个表达式位置生成了专属的写入函数,信号变化时它们被精确调用。刷新这件事从组件级下沉到了节点级。

错觉二:"props 和 React 的 props 是同一个东西。"实际情况:形状一致,机制是取值器对象。读取时机决定值是否保鲜,这是第 3 章的核心议题,先在词汇层面把"props 对象"标记为形似神不似。

错觉三:"条件渲染和列表渲染是语法问题。"实际情况:在 Solid 里它们是架构问题——表达式只求值一次的模型下,列表必须交给专门的跟踪组件,这在 React 里是风格偏好,在这里是正确性要求。

错觉四:"测试和工具链也要重学一遍。"实际情况:这两块的迁移成本出乎意料地低,第 9 章会展示查询 API 几乎原样平移。第一周不需要为它们焦虑。

四条错觉对应四类 API 面貌,也预告了全册的章节安排:执行模型在先(第 2 章),props 与生命周期其次(第 3 章),控制流再次(第 4 章),工具面殿后(第 7、9 章)。词汇表是地图,错觉清单是路上的坑,两者合起来,第一周的路线就算画完了。

💡 给团队迁移组织者的建议:把本节的总对照表打印成桌面卡,前两周的代码评审遇到争议就翻卡。争议减少的速度,就是心智模型对齐的速度。

下一章进入状态原语的逐个对照,从最常用的 createSignaluseState 开始。


作者与出处
原作者: 灏天文库
来源:灏天文库
整理: 灏天文库整理
由灏天文库平台收录,内容或由平台用户上传,仅供学习交流
发布者: 作者: 灏天文库 转发
评论区 (0)
U