网站 • API 文档 • 特性教程 • 在线演练场 • Discord
Solid 是一个用于创建用户界面的声明式 JavaScript 库。它不使用虚拟 DOM,而是将模板编译为真实的 DOM 节点,并通过细粒度的响应式更新它们。声明你的状态并在整个应用中使用它,当某个状态发生变化时,只有依赖于它的代码会重新运行。
import { createSignal } from "solid-js"; import { render } from "solid-js/web"; function Counter() { const [count, setCount] = createSignal(0); const doubleCount = () => count() * 2; console.log("函数体只运行一次..."); return ( <> <button onClick={() => setCount(c => c + 1)}> {doubleCount()} </button> </> ); } render(Counter, document.getElementById("app")!);
在我们的在线演练场中尝试这段代码!
<details> <summary>解释一下!</summary>import { createSignal } from "solid-js"; import { render } from "solid-js/web"; // 组件只是一个返回 DOM 节点的函数 function Counter() { // 创建一个响应式状态,给我们一个访问器 count() 和一个设置器 setCount() const [count, setCount] = createSignal(0); // 要创建派生状态,只需将表达式包装在一个函数中 const doubleCount = () => count() * 2; console.log("函数体只运行一次..."); // JSX 允许你在 JavaScript 函数中编写 HTML,并使用 { } 语法包含动态表达式 // 这里唯一会重新渲染的部分是 doubleCount() 文本。 return ( <> <button onClick={() => setCount(c => c + 1)}> 递增:{doubleCount()} </button> </> ); } // render 函数将组件挂载到页面上 render(Counter, document.getElementById("app")!);
Solid 将你的 JSX 编译成高效的真实 DOM 更新。它在运行时使用相同的响应式原语(createSignal
),但确保尽可能少的重新渲染。以下是这个例子的编译结果:
</details>import { template as _$template } from "solid-js/web"; import { delegateEvents as _$delegateEvents } from "solid-js/web"; import { insert as _$insert } from "solid-js/web"; // 编译器提取出任何静态 HTML const _tmpl$ = /*#__PURE__*/_$template(`<button>递增:`); import { createSignal, createEffect } from "solid-js"; import { render } from "solid-js/web"; function Counter() { const [count, setCount] = createSignal(0); const doubleCount = () => count() * 2; console.log("函数体只运行一次..."); return (() => { // _el$ 是一个真实的 DOM 节点! const _el$ = _tmpl$(); _el$.$$click = () => setCount(c => c + 1); // 这将 count 作为按钮的子元素插入,允许 count 更新而无需重新渲染整个按钮 _$insert(_el$, doubleCount); return _el$; })(); } render(Counter, document.getElementById("app")); _$delegateEvents(["click"]);
<div>
就是一个真实的 div,因此你可以使用浏览器的开发工具来检查渲染你可以通过在终端中运行以下命令来快速开始一个简单的应用:
> npx degit solidjs/templates/js my-app > cd my-app > npm i # 或 yarn 或 pnpm > npm run dev # 或 yarn 或 pnpm
或者使用 TypeScript:
> npx degit solidjs/templates/ts my-app > cd my-app > npm i # 或 yarn 或 pnpm > npm run dev # 或 yarn 或 pnpm
这将创建一个由 Vite 驱动的最小化、客户端渲染的应用程序。
或者你可以在自己的设置中安装依赖。要使用 Solid 和 JSX(推荐),运行:
> npm i -D babel-preset-solid > npm i solid-js
最简单的设置方法是将 babel-preset-solid
添加到你的 .babelrc
、webpack 的 babel 配置或 rollup 配置中:
"presets": ["solid"]
对于 TypeScript,记得在你的 .tsconfig
中设置以处理 Solid 的 JSX:
</details>"compilerOptions": { "jsx": "preserve", "jsxImportSource": "solid-js", }
经过精心设计并拥有五年多的研究背景,Solid 的性能几乎与优化过的原生 JavaScript 无异(参见 JS Framework Benchmark 中的 Solid)。Solid 体积小且完全可树摇,在服务器渲染时也速度很快。无论你是编写完全客户端渲染的 SPA 还是服务器渲染的应用,你的用户都能比以往更快地看到它。(从库的创建者那里了解更多关于 Solid 性能的信息。)
Solid 具备现代框架所应有的所有功能。内置的 Context 和 Store 提供高性能的状态管理:您无需使用第三方库来管理全局状态(如果不想的话)。通过 Resources,您可以像使用其他状态一样使用从服务器加载的数据,并借助 Suspense 和并发渲染为其构建响应式 UI。当您准备转向服务器端时,Solid 提供完整的 SSR 和无服务器支持,通过流式传输和渐进式水合作用尽快实现交互。(查看我们完整的交互功能演练。)
用更少做更多:使用简单、可组合的原语,没有隐藏规则和陷阱。在 Solid 中,组件只是函数 - 渲染完全由状态的使用方式决定 - 因此您可以自由组织代码,无需学习新的渲染系统。Solid 鼓励声明式代码和读写分离等模式,有助于保持项目的可维护性,但又不会固执己见到妨碍您的程度。
Solid 建立在 JSX 和 TypeScript 等成熟工具之上,并与 Vite 生态系统集成。Solid 的低级抽象让您可以直接访问 DOM,轻松使用喜欢的原生 JavaScript 库,如 D3。Solid 生态系统正在快速增长,包括自定义原语、组件库和构建时工具,让您能够以新方式编写 Solid 代码。
SolidJS Core 致力于支持过去 2 年的现代浏览器,包括 Firefox、Safari、Chrome 和 Edge(桌面和移动设备)。我们不支持 IE 或类似的过时浏览器。对于服务器环境,我们支持 Node LTS 以及最新的 Deno 和 Cloudflare Worker 运行时。
<img src="https://yellow-cdn.veclightyear.com/2b54e442/4169fb84-ab7e-4f4d-9943-a2ee6cced94d.svg?sanitize=true" alt="Testing Powered By SauceLabs" width="300"/>来Discord与我们聊天吧!Solid 的创始人和其他核心团队成员都活跃在那里,我们一直在寻找贡献者。
<a href="https://github.com/solidjs/solid/graphs/contributors"><img src="https://yellow-cdn.veclightyear.com/2b54e442/3df4526b-83a1-4d62-8deb-bb730a42d282.svg?width=890&button=false" style="max-width:100%;"></a>
通过捐赠支持我们,帮助我们继续我们的活动。[贡献]
<a href="https://opencollective.com/solid/backer/0/website" target="_blank"><img src="https://yellow-cdn.veclightyear.com/2b54e442/bb1449be-b92b-4dad-8e08-ceb5ad55ff6e.svg"></a> <a href="https://opencollective.com/solid/backer/1/website" target="_blank"><img src="https://yellow-cdn.veclightyear.com/2b54e442/3fa3ce3d-a0e0-4d7d-890a-633b224e5b0d.svg"></a> <a href="https://opencollective.com/solid/backer/2/website" target="_blank"><img src="https://yellow-cdn.veclightyear.com/2b54e442/02391578-6a31-47b5-8638-ba9ba5c07411.svg"></a> <a href="https://opencollective.com/solid/backer/3/website" target="_blank"><img src="https://yellow-cdn.veclightyear.com/2b54e442/d6ae0335-df23-4cc8-846f-cf666d6d9eea.svg"></a> <a href="https://opencollective.com/solid/backer/4/website" target="_blank"><img src="https://yellow-cdn.veclightyear.com/2b54e442/7e6a5d71-877c-4e5d-a3a7-c4672c623810.svg"></a> <a href="https://opencollective.com/solid/backer/5/website" target="_blank"><img src="https://yellow-cdn.veclightyear.com/2b54e442/fcbeb2d8-2c03-4d72-a380-87ff3ca17042.svg"></a> <a href="https://opencollective.com/solid/backer/6/website" target="_blank"><img src="https://yellow-cdn.veclightyear.com/2b54e442/da3131e3-309f-4158-ae3f-96a88a5fdc09.svg"></a> <a href="https://opencollective.com/solid/backer/7/website" target="_blank"><img src="https://yellow-cdn.veclightyear.com/2b54e442/a5ab3287-2779-498b-8554-c3f7d1406c25.svg"></a> <a href="https://opencollective.com/solid/backer/8/website" target="_blank"><img src="https://yellow-cdn.veclightyear.com/2b54e442/4eb3c467-da5a-4663-a31c-c6ec38eda441.svg"></a> <a href="https://opencollective.com/solid/backer/9/website" target="_blank"><img src="https://yellow-cdn.veclightyear.com/2b54e442/de6fb45e-9125-4135-8e1f-7a119656fad3.svg"></a> <a href="https://opencollective.com/solid/backer/10/website" target="_blank"><img src="https://yellow-cdn.veclightyear.com/2b54e442/ad04b925-aa72-41cf-9285-fec548a6450d.svg"></a>
成为赞助商,在我们的 GitHub README 上展示您的 logo 并链接到您的网站。[成为赞助商] <a href="https://opencollective.com/solid/sponsor/0/website" target="_blank"><img src="https://yellow-cdn.veclightyear.com/2b54e442/05e453f0-1707-4561-89ab-3e4d9ba13589.svg"></a> <a href="https://opencollective.com/solid/sponsor/1/website" target="_blank"><img src="https://yellow-cdn.veclightyear.com/2b54e442/8f7e9e51-3a64-448b-9242-f56fcf9808b6.svg"></a> <a href="https://opencollective.com/solid/sponsor/2/website" target="_blank"><img src="https://yellow-cdn.veclightyear.com/2b54e442/538e079c-e097-4433-a325-a4fb33d4e072.svg"></a> <a href="https://opencollective.com/solid/sponsor/3/website" target="_blank"><img src="https://yellow-cdn.veclightyear.com/2b54e442/090db4a1-30ad-4037-a81b-6fc58d2b55f0.svg"></a> <a href="https://opencollective.com/solid/sponsor/4/website" target="_blank"><img src="https://yellow-cdn.veclightyear.com/2b54e442/ccec2bd3-211a-4c57-a9f8-63faea87f6b7.svg"></a> <a href="https://opencollective.com/solid/sponsor/5/website" target="_blank"><img src="https://yellow-cdn.veclightyear.com/2b54e442/ca10d9f2-5201-463d-8c5c-e82d89621882.svg"></a> <a href="https://opencollective.com/solid/sponsor/6/website" target="_blank"><img src="https://yellow-cdn.veclightyear.com/2b54e442/4aeedd3d-8efe-4c00-853a-1b3965c3c225.svg"></a> <a href="https://opencollective.com/solid/sponsor/7/website" target="_blank"><img src="https://yellow-cdn.veclightyear.com/2b54e442/ecf83d33-d610-4e81-80e7-800a8cf8ef98.svg"></a> <a href="https://opencollective.com/solid/sponsor/8/website" target="_blank"><img src="https://yellow-cdn.veclightyear.com/2b54e442/2085a48f-910e-4af2-ab0f-647eb6cf34b1.svg"></a> <a href="https://opencollective.com/solid/sponsor/9/website" target="_blank"><img src="https://yellow-cdn.veclightyear.com/2b54e442/5b02db56-89e9-4f43-b953-1b9bae0d2e7e.svg"></a> <a href="https://opencollective.com/solid/sponsor/10/website" target="_blank"><img src="https://yellow-cdn.veclightyear.com/2b54e442/855acf88-b3b7-411b-8b19-f0cc657240dc.svg"></a> <a href="https://opencollective.com/solid/sponsor/11/website" target="_blank"><img src="https://yellow-cdn.veclightyear.com/2b54e442/df07c22d-1739-4e8f-9dec-5c8c6a516b42.svg"></a> <a href="https://opencollective.com/solid/sponsor/12/website" target="_blank"><img src="https://yellow-cdn.veclightyear.com/2b54e442/f4badfca-803b-49c9-9f5b-9f6950a5a64a.svg"></a>
AI数字人视频创作平台
Keevx 一款开箱即用的AI数字人视频创作平台,广泛适用于电商广告、企业培训与社媒宣传,让全球企业与个人创作者无需拍摄剪辑,就能快速生成多语言、高质量的专业视频。
一站式AI创作平台
提供 AI 驱动的图片、视频生成及数字人等功能,助力创意创作
AI办公助手,复杂任务高效处理
AI办公助手,复杂任务高效处理。办公效率低?扣子空间AI助手支持播客生成、PPT制作、网页开发及报告写作,覆盖科研、商业、舆情等领域的专家Agent 7x24小时 响应,生活工作无缝切换,提升50%效率!
AI辅助编程,代码自动修复
Trae是一种自适应的集成开发环境(IDE),通过自动化和多元协作改变开发流程。利用Trae,团队能够更快速、精确地编写和部署代码,从而提高编程效率和项目交付速度。Trae具备上下文感知和代码自动完成功能,是提升开发效率的理想工具。
AI小说写作助手,一站式润色、改写、扩写
蛙蛙写作—国内先进的AI写作平台,涵盖小说、学术、社交媒体等多场景。提供续写、改写、润色等功能,助力创作者高效优化写作流程。界面简洁,功能全面,适合各类写作者提升内容品质和工作效率。
全能AI智能助手,随时解答生活与工作的多样问题
问小白,由元石科技研发的AI智能助手,快速准确地解答各种生活和工作问题,包括但不限于搜索、规划和社交互动,帮助用户在日常生活中提高效率,轻松管理个人事务。
实时语音翻译/同声传译工具
Transly是一个多场景的AI大语言模型驱动的同声传译、专业翻译助手,它拥有超精准的音频识别翻译能力,几乎零延迟的使用体验和支持多国语言可以让你带它走遍全球,无论你是留学生、商务人士、韩剧美剧爱好者,还是出国游玩、多国会议、跨国追星等等,都可以满足你所有需要同传的场景需求,线上线下通用,扫除语言障碍,让全世界的语言交流不再有国界。
一键生成PPT和Word,让学习生活更轻松
讯飞智文是一个利用 AI 技术的项目,能够帮助用户生成 PPT 以及各类文档。无论是商业领域的市场分析报告、年度目标制定,还是学生群体的职业生涯规划、实习避坑指南,亦或是活动策划、旅游攻略等内容,它都能提供支持,帮助用户精准表达,轻松呈现各种信息。
深度推理能力全新升级,全面对标OpenAI o1
科大讯飞的星火大模型,支持语言理解、知识问答和文本创作等多功能,适用于多种文件和业务场景,提升办公和日常生活的效率。讯飞星火是一个提供丰富智能服务的平台,涵盖科技资讯、图像创作、写作辅助、编程解答、科研文献解读等功能,能为不同需求的用户提供便捷高效的帮助,助力用户轻松获取信息、解决问题,满足多样化使用场景。
一种基于大语言模型的高效单流解耦语音令牌文本到语音合成模型
Spark-TTS 是一个基于 PyTorch 的开源文本到语音合成项目,由多个知名机构联合参与。该项目提供了高效的 LLM(大语言模型)驱动的语音合成方案,支持语音克隆和语音创建功能,可通过命令行界面(CLI)和 Web UI 两种方式使用。用户可以根据需求调整语音的性别、音高、速度等参数,生成高质量的语音。该项目适用于多种场景,如有声读物制作、智能语音助手开发等。
最新AI工具、AI资讯
独家AI资源、AI项目落地
微信扫一扫关注公众号