# 1. useReducer + Context 在中型状态管理的边界(与 Redux 的取舍) A Redux 在新版 React 中已完全被 useReducer+Context 取代 B Context 的 value 变化会通知所有消费组件,缺乏细粒度订阅 ✓ 正确答案 C useReducer+Context 提供完善的 DevTools 时间旅行功能 D Context 适合高频更新的全局状态
# 2. Nanostores 的 @nanostores/react 与跨框架互操作 A Nanostores 的 store 依赖 React 才能工作 B Nanostores 无法在 Vue 中复用 C Nanostores 依赖 Proxy 实现响应式 D useStore 会在组件卸载时自动取消订阅 ✓ 正确答案
# 3. Context API + useSyncExternalStore 在轻量全局状态的工程价值 A 它通过 getSnapshot 与 subscribe 实现外部 store 的安全订阅,避免 tearing ✓ 正确答案 B 它会在每次渲染时强制重新订阅 C 它无法与并发渲染兼容 D 它只用于 React 内部状态,不能订阅外部 store
# 4. Zustand 与 Jotai 在原子状态(atomic state) A 两者都需要手动实现 selector 引用稳定 B Zustand 使用原子状态模型,Jotai 使用集中式 store C Jotai 通过原子组合与依赖追踪自动实现细粒度订阅 ✓ 正确答案 D Zustand 无法做 selector 订阅
# 5. Jotai 的 atomFamily 与 atomWithStorage 在动态键与持久化的应用 A atomFamily 会为不同参数返回同一个原子 B atomWithStorage 自动将原子状态持久化到 storage ✓ 正确答案 C atomFamily 无法用于持久化 D atomWithStorage 返回的是普通对象而非原子
# 6. Zustand 的 subscribeWithSelector 与 useShallow 在 selector 引用稳定性的工程价值 A 它对 selector 返回值做深比较判断是否变化 B 它只能用于单个字段的 selector C 它会让 store 无法订阅 D 它通过浅比较避免因新对象引用而导致的重复渲染 ✓ 正确答案
# 7. Jotai 的原子化状态与依赖追踪 A 组件通过依赖图自动订阅受影响的 atom,实现最小化更新 ✓ 正确答案 B Jotai 不支持异步 atom C 依赖追踪需要手动声明每个订阅关系 D derived atom 每次渲染都重新计算,不做缓存
# 8. Zustand 的轻量与 selector 订阅 A selector 返回对象时必然导致重渲染 B Zustand 需要 Provider 包裹才能使用 C Zustand 依赖 Context 实现状态共享 D selector 只用 Object.is 比较结果,变化时才触发重渲染 ✓ 正确答案
# 9. useState/useReducer 与外部状态管理库的边界 A 状态提升是解决跨组件共享的中间手段,能解决时无需引入外部库 ✓ 正确答案 B 所有跨组件共享的状态都应立刻使用外部状态库 C useState 无法在组件内使用 D 外部状态库比 useState 性能一定更好
# 10. TanStack Query 的 staleTime/gcTime 与 React 19 use()/Server Functions 的协作 A staleTime 控制内存回收,gcTime 控制过期时间 B staleTime 控制数据多久后视为过期,gcTime 控制缓存多久后回收 ✓ 正确答案 C 两者作用完全相同 D gcTime 默认是 0 毫秒
# 11. Zustand 的 slice 与持久化 与 SSR/RSC 边界的协作 A persist 中间件在服务端也会读写 localStorage B slice 模式会破坏类型推导 C 模块级 store 单例在 SSR 中可能被多个请求共享导致串数据 ✓ 正确答案 D SSR 下无需处理 store 单例问题
# 12. Valtio 的 proxy/snapshot/subscribe 双向同步在表单与撤销重做的应用 A proxy 状态不可直接修改 B useSnapshot 返回一个可变的 proxy 对象 C Valtio 无法做撤销重做 D 写操作通过 proxy 完成,读操作通过快照完成,实现双向同步 ✓ 正确答案
# 13. Nanostores 的极小体积与框架无关 A 它依赖 React 才能运行 B 它内置了完整的 DevTools 支持 C 核心体积约 1KB,且不依赖任何框架,可跨框架共享 ✓ 正确答案 D 它必须搭配特定框架使用
# 14. Valtio 的 Proxy 响应式模式 A 写操作会返回不可变快照 B Proxy 在 get 时收集依赖、set 时触发通知,useSnapshot 实现细粒度订阅 ✓ 正确答案 C 需要手动声明每个组件的依赖 D Proxy 无法深层次代理对象
# 15. Redux Toolkit 在测试与可维护性的工程价值 A reducer 是纯函数,输入 state 与 action 输出新 state,易于单元测试 ✓ 正确答案 B createAsyncThunk 使异步流程无法测试 C RTK 增加了大量样板代码 D createSlice 无法组织 action 类型
# 16. TanStack Query v5 与 URL 状态/路由器的协作 A queryKey 与 URL 参数完全无关 B URL 参数应作为 queryKey 的一部分,使 URL 变化映射到对应缓存 ✓ 正确答案 C 路由切换无法触发数据获取 D v5 不支持 queryKey 字符串化
# 17. Recoil(已停止维护)历史方案与 Jotai 演进的取舍 A Recoil 至今仍在活跃维护 B Jotai 继承了 Recoil 的原子化思想并更轻量、维护活跃 ✓ 正确答案 C Recoil 的 atom 概念无法迁移到 Jotai D Jotai 完全复制了 Recoil 的实现
# 18. useRef/useImperativeHandle 在命令式 API(动画控制器) A 它让父组件通过 ref 调用子组件暴露的命令式方法 ✓ 正确答案 B 它替代了 useState 的所有功能 C 它用于声明式地传递状态 D 它只能在类组件中使用
# 19. Signals 提案的细粒度响应式(alien-signals、@preact/signals) A Signal 变化会触发整棵树重新渲染 B Signals 只能用于 Preact C Signal 是不可变的值 D Signal 读取时追踪依赖,写入时只通知订阅者 ✓ 正确答案
# 20. Signals 提案与 use-signals 的标准化进程 A 标准化已完全结束 B Signals 提案已正式成为 ECMAScript 标准 C use-signals 是 React 官方内置的信号支持 D TC39 正在推进 Signals 提案标准化,use-signals 是把信号接入 React 的适配库 ✓ 正确答案
# 21. Recoil 停止维护后,atom/selector 模式向 Jotai 迁移的等价实现与踩坑 A 两者 API 完全一致,无需调整 B Jotai 不支持 derived atom C Recoil 的 selectorFamily 对应 Jotai 的 atomFamily ✓ 正确答案 D Recoil 的 atom 无法映射到 Jotai
# 22. Apollo Client 的 normalized cache(typePolicies 与 field policies)在本地状态与远端数据协作的工程取舍 A 所有查询结果都做深拷贝,不做归一化 B field policies 只能读不能写 C normalized cache 无法配合本地状态 D 查询结果按类型+id 归一化存储,typePolicies 定义缓存键 ✓ 正确答案
# 23. TanStack Query 的 queryKey 与缓存失效 在大型表单与复杂状态的协作 A queryKey 是缓存标识,可按前缀匹配进行精确失效 ✓ 正确答案 B invalidateQueries 只能失效全部缓存 C 表单提交后无需刷新缓存 D queryKey 无法包含对象