Solid 与细粒度更新

共 17 题
#

1. Solid 的细粒度响应式原理(信号+派生+effect),与 React 重新渲染的差异?

A Solid 组件在信号变化时会整体重新执行
B Solid 的更新粒度精确到模板表达式,无需 diff 整棵组件树 ✓ 正确答案
C Solid 依赖虚拟 DOM 完成差异更新
D 信号写入会触发所有 effect 无条件重跑
#

2. Solid 的依赖追踪,createMemo 如何缓存派生值,effect 的订阅与清理时机如何管理?

A memo 的依赖变化后会被立即重新计算
B createMemo 每次读取都会重新执行计算函数
C createEffect 不会自动收集依赖,需要手动声明
D onCleanup 注册的清理函数在 effect 重跑前与组件卸载时执行 ✓ 正确答案
#

3. Solid Store(createStore)的代理与不可变更新,为什么 Store 的字段级订阅比信号更节省内存,在大型表单/树状数据中如何取舍?

A createStore 在创建时会一次性代理包装对象的每一层
B Store 的订阅粒度可精确到字段路径,比信号更节省依赖与内存 ✓ 正确答案
C Store 与信号(createSignal)不能在同一应用中共存
D Store 更新必须整体替换整个对象
#

4. Solid 与 Signals 生态对比,Preact Signals、Million 等框架/库与 Solid 的细粒度实现与生态成熟度差异?

A Million 定位为独立的全功能框架
B Preact Signals 完全抛弃了虚拟 DOM 机制
C Solid 编译 JSX 为细粒度更新表达式,无虚拟 DOM ✓ 正确答案
D Solid 的组件库生态规模已超过 React
#

5. Solid 的 Store 与 Signals,细粒度订阅的取舍?

A 嵌套表单场景用 Store 的字段级订阅更合适 ✓ 正确答案
B Store 更新必须整体替换整个数据对象
C 信号(createSignal)同样支持字段级订阅
D 树状结构化数据应优先拆分为大量独立信号
#

6. Solid 的 createResource 与 Suspense,异步资源加载、refetching 与错误处理在数据获取层的工程价值?

A Suspense 组件不会渲染任何占位内容
B createResource 的结果是普通可变对象
C source 信号变化会自动触发资源重新获取 ✓ 正确答案
D 资源请求失败无法被捕获或降级
#

7. Solid 中 createSignal/createMemo/createEffect 的依赖追踪机制?

A 依赖关系在信号写入时通过全量扫描收集
B memo 不会缓存计算结果,每次读取都重算
C 读取信号时会把当前观察者(effect/memo)注册为该信号的依赖 ✓ 正确答案
D effect 重跑前不会执行任何清理逻辑
#

8. Solid 的 Show/For/Index 控制流组件为何比 map 更高效?

A For 组件不提供 keyed 语义,只能按索引复用
B JSX 中直接 map 在数据变化时会整体重建列表 DOM 并重新收集依赖 ✓ 正确答案
C Show 组件每次条件变化都会重建模板表达式
D Index 组件以数据值作为复用 key
#

9. Show/For/Index 控制流组件相比 JSX map 的优势与 keyed 语义差异?

A map 能保持响应式依赖不被重建
B Index 组件以数据值作为 key 实现实例复用
C Show 组件不支持 else/fallback 分支
D For 组件以数据项标识为 key 复用组件实例,数据移动时状态跟随 ✓ 正确答案
#

10. SolidStart 的 server functions 与路由数据加载如何实现"零序列化开销"的服务端集成?

A createServerFn 编译为 RPC 调用,数据在服务端获取后直达客户端 ✓ 正确答案
B SolidStart 无法流式传输加载数据
C server functions 的代码在浏览器端执行
D server function 内部不能访问服务端密钥
#

11. batch/untrack/on 三个响应式工具函数的适用场景,什么时候需要手动合并更新、跳过依赖追踪或指定依赖?

A batch 会抑制所有订阅者的更新通知
B batch 会让每次信号写入立即触发一次更新
C on 只能声明一个依赖信号
D untrack 包裹的信号读取不会注册依赖 ✓ 正确答案
#

12. Solid Context(createContext + Provider)与 React Context 的差异,为什么 Solid 中 Context 更新不会触发子树整体重渲染?

A Solid 中 context 内传递信号时,消费方按读取的字段建立依赖 ✓ 正确答案
B React 的 context 更新只影响读取特定字段的表达式
C Solid 的 context 值变化会触发整个消费子树重新渲染
D Solid 的 createContext 没有 Provider 支持
#

13. SolidStart 与 Solid 生态的现状与适用场景?

A SolidStart 提供 SSR、岛屿渲染与 server functions 等全栈能力 ✓ 正确答案
B Solid 生态规模在组件库与招聘市场上已超过 React
C SolidStart 不支持路由与数据加载
D SolidStart 是运行在 React 之上的上层框架
#

14. Solid 细粒度更新在大型表单/列表场景的实战收益与调试成本?

A Solid 更新大型列表时会整体重建 DOM 树
B Solid 需要像 React 一样手动 memo 优化组件
C Solid 的调试方式与 React 完全一致
D Solid DevTools 提供依赖追踪与组件数据的检查能力 ✓ 正确答案
#

15. SolidStart 的 Islands 与 Astro 的差异,客户端水合粒度与"零 JS 默认"策略的实现区别?

A SolidStart 默认完全不做任何水合
B Astro 的岛屿只能使用 React 框架
C Astro 默认输出零 JS 的静态 HTML,仅显式标注的岛屿被水合 ✓ 正确答案
D Astro 的岛屿水合会覆盖整个页面
#

16. Solid 与 React 的渲染模型对比,组件只执行一次?

A React 组件函数只执行一次
B Solid 组件函数在每次信号变化时重新执行
C Solid 组件只执行一次,更新由信号驱动的表达式完成 ✓ 正确答案
D Solid 组件体内的重逻辑会随每次更新重复执行
#

17. Solid 的 ErrorBoundary,错误边界、fallback 与错误重抛机制的设计?

A ErrorBoundary 可以捕获事件处理器内的所有错误
B fallback 渲染后无法重置或重试
C ErrorBoundary 只能捕获渲染期与生命周期中的错误并渲染 fallback ✓ 正确答案
D 错误边界一旦捕获错误就不能再抛出给上层