关于 solidjs-v2
solidjs-v2 是面向 Solid 2.0 开发者的参考技能,目标为指定的候选发布包。它提供响应式、异步数据、状态存储、DOM 行为及相关 API 的版本适配指导。
主要功能
- 01Solid 2.0 响应式模式
- 02异步数据与操作指导
- 03状态存储更新模式
- 04DOM、TypeScript 和服务端函数参考
- 05按版本核验 API 与实现
适用场景
- 01解答 Solid 2 API 问题
- 02实现响应式界面状态和派生值
- 03处理异步加载、修改与错误
- 04依据参考资料检查 Solid 2 代码和示例
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ khmm12/ solidjs-v2-skills --skill solidjs-v2安装后在 Claude Code 中输入/solidjs-v2确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
references/async-and-actions.mdcontrol-flow-and-dom.mdconventions.mdpatterns.mdreactivity.mdserver-components.mdserver-functions.mdstores.mdtypescript-setup.md详细介绍
SolidJS 2.0
参考目标:[email protected] 和 @solidjs/[email protected]。
确认版本
如果独立问题提到了 Solid 2,请使用已验证的参考目标。
对于项目修改,请读取已安装的 solid-js 版本(锁文件/包元数据);若为主版本 2,则应用本指南。除非用户要求迁移,否则保留 1.x 项目的惯例。
如果版本不同,已安装的类型定义优先于这些参考内容。
使用 Solid v2 模型
- 组件每次挂载只运行一次。 JSX、memo 和 effect 的计算回调会跟踪读取操作。将 props 保留为
props.name;在这些跟踪作用域内读取它们。 - 变化的 UI 值应保存在信号或 store 中。 访问器必须读取响应式状态才能订阅。将普通
let/Map 包装在函数中,并不会让赋值变为响应式;普通变量应只用于不参与渲染的记录工作。 - JSX 编译器会提供跟踪和 getter。 写成
<Counter value={count()} />,并在子组件中读取props.value。该表达式是一个值,不是额外的回调。对于手动构建的 options 对象,应使用 getter 或与被调用函数类型匹配的访问器。 遵循值的类型:调用 signal/memo 访问器,直接读取 store 字段,并向列表渲染传入数组值。JSX 会跟踪<span>{label()}</span>这样的表达式;只有类型明确要求回调子元素的组件才使用回调子元素,例如For。使用keyed={row => row.id}时,For会提供行访问器(row());默认的For会提供原始行(row.name)。 - 派生状态。 对只读派生状态使用
createMemo,对可写派生状态使用createSignal(() => props.initial)。从处理器、effect apply 回调或onSettled中调用 setter 和操作。 - 写入会在微任务中提交。 如果命令式调用方需要在下一行获取更新后的状态或 DOM,请使用
flush()。 - Effects 有两个必需阶段。
createEffect(compute, apply, options?)会在 compute 中跟踪;apply 不跟踪地运行,并返回清理函数或undefined。对于 compute 错误,将第二个参数替换为{ effect, error }。 - 异步逻辑应放在计算中。 从 memo 或派生 store 返回 Promise/AsyncIterable。在
Loading中渲染消费者;使用Errored处理错误。 - 异步客户端变更使用 actions。 乐观写入 → yield 服务端工作 → 使用
yield refresh(source)确认重新获取,或使用yield until(predicate)等待实时确认。乐观覆盖层在成功和失败时都会结束;确认操作会提供持久状态。在调用处处理 action Promise。 当快照替换行时,将显示中的编辑内容保存在单独的乐观状态中;在操作完成前,将该编辑内容叠加显示在最新确认的行上。 保存指示器读取一个乐观标志。SSR 会消费异步源。 - Store 使用草稿。 从
solid-js导入createStore;使用const [state, setState] = createStore(initial)获取 setter。在回调花括号内修改;仅在有意替换根状态时才返回值。 - DOM 属于
@solidjs/web。 使用其 JSX 类型和jsxImportSource;HTML 属性名使用小写,class可用数组/对象,并使用回调 ref。
选择适合任务的模式
打开下方对应的链接文件,阅读相关章节及其中的示例和注意事项。请相对于此 SKILL.md 解析链接,而不是相对于项目的工作目录。搜索符号时,请在此技能的文件夹中使用 rg --hidden:整个工作区的搜索会跳过隐藏的 .agents/.codex 文件夹,可能会误以为某个 API 没有文档。
简短的 API 问题也需要进行此项查阅。对于组合模式,请沿本地链接继续查阅。实现前,请明确要读取的状态、会改变该状态的事件,以及负责其生命周期的组件/请求。当所选模式涵盖这些行为及其完成/失败路径时,即可结束查阅;搜索结果为空并不能证明某个 API 不存在。
| 任务 | 参考资料 |
|---|---|
| 可编辑属性、派生值、订阅、持久化、DOM 时序、诊断 | reactivity |
| 获取/渲染数据、乐观保存、显示进度、通过重新获取或实时回显确认写入 | async and actions |
| 更新记录、合并服务端数据、选择行、公开嵌套实时视图、快照/深层 | stores |
| 渲染列表/分支、加载组件、SSR 流式传输、属性、事件、引用 | control flow and DOM |
| 导入、TypeScript、上下文、测试设置 | TypeScript setup |
| 缓存优先查询、变化的套接字订阅、选中行、共享/每请求状态 | patterns |
createX 和 useX 命名 | conventions |
| 服务端函数、请求本地状态/扩展、传输、验证、单航班、无 JS 表单 | server functions |
| 实验性服务端组件和客户端插槽 | server components |
验证结果
改编规范示例,保留其导入、类型、所有权和取消机制。包含实现所需的辅助工具。用法示例也要使用提供的接口;如果某些服务的实现不属于任务范围,请将其作为参数接收。
有关 API 的精确说明应采用已发布的签名,包括调用方提出的 API。明确说明缺失或未经验证的契约,不要自行臆造。也要检查其他断言;保留源内容中的条件和例外。照搬准确的调用/类型结构,再改编名称和数据。可执行示例必须保持为有效的 TypeScript,包括 JSX 和导入。
在多文件示例中,每个使用共享类型的消费者都要导入该类型。
类型检查可以验证签名;运行时断言则用于确认顺序、清理、待处理状态和水合行为。使用项目的测试设置验证所需的状态转换,包括失败和释放情形。现有的冒烟测试只覆盖其实际断言的内容。最终说明仅陈述已实现的行为、实际运行的检查和剩余的不确定性;对未经测试的主张要标注为未经验证。