solid

solid

高性能声明式 JavaScript UI 框架

SolidJS 是一个高性能的声明式 JavaScript UI 框架。它通过编译模板到真实 DOM 节点并采用细粒度反应式更新,实现卓越性能。开发者可在应用中声明和使用状态,仅在状态变化时更新相关代码。SolidJS 集成了 JSX、上下文、Suspense、SSR 等现代特性,同时保持简洁易学和高度可组合性。

SolidJS前端框架响应式编程性能优化JSXGithub开源项目
<p> <img src="https://assets.solidjs.com/banner?project=Library&type=core" alt="SolidJS" /> </p>

构建状态 覆盖率状态

NPM 版本 Discord Subreddit 订阅者

网站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),但确保尽可能少的重新渲染。以下是这个例子的编译结果:

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"]);
</details>

主要特性

  • 对真实 DOM 进行细粒度更新
  • 声明式数据:将你的状态建模为具有响应式原语的系统
  • 一次性渲染的心智模型:你的组件是只运行一次来设置视图的常规 JavaScript 函数
  • 自动依赖追踪:访问你的响应式状态会自动订阅它
  • 体积小速度快
  • 简单:学习几个强大的概念,这些概念可以被重用、组合和构建
  • 提供现代框架特性,如 JSX、片段、Context、Portals、Suspense、流式 SSR、渐进式水合、错误边界和并发渲染
  • 天然可调试:<div> 就是一个真实的 div,因此你可以使用浏览器的开发工具来检查渲染
  • Web 组件友好,可以创作自定义元素
  • 同构:在客户端和服务器上渲染你的组件
  • 通用:编写自定义渲染器以在任何地方使用 Solid
  • 不断增长的社区和生态系统,核心团队积极支持
<details> <summary>快速开始</summary>

你可以通过在终端中运行以下命令来快速开始一个简单的应用:

> 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:

"compilerOptions": { "jsx": "preserve", "jsxImportSource": "solid-js", }
</details>

为什么选择 Solid?

高性能

经过精心设计并拥有五年多的研究背景,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&amp;button=false" style="max-width:100%;"></a>

Open Collective

通过捐赠支持我们,帮助我们继续我们的活动。[贡献]

<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>

编辑推荐精选

Keevx

Keevx

AI数字人视频创作平台

Keevx 一款开箱即用的AI数字人视频创作平台,广泛适用于电商广告、企业培训与社媒宣传,让全球企业与个人创作者无需拍摄剪辑,就能快速生成多语言、高质量的专业视频。

即梦AI

即梦AI

一站式AI创作平台

提供 AI 驱动的图片、视频生成及数字人等功能,助力创意创作

扣子-AI办公

扣子-AI办公

AI办公助手,复杂任务高效处理

AI办公助手,复杂任务高效处理。办公效率低?扣子空间AI助手支持播客生成、PPT制作、网页开发及报告写作,覆盖科研、商业、舆情等领域的专家Agent 7x24小时响应,生活工作无缝切换,提升50%效率!

TRAE编程

TRAE编程

AI辅助编程,代码自动修复

Trae是一种自适应的集成开发环境(IDE),通过自动化和多元协作改变开发流程。利用Trae,团队能够更快速、精确地编写和部署代码,从而提高编程效率和项目交付速度。Trae具备上下文感知和代码自动完成功能,是提升开发效率的理想工具。

AI工具TraeAI IDE协作生产力转型热门
蛙蛙写作

蛙蛙写作

AI小说写作助手,一站式润色、改写、扩写

蛙蛙写作—国内先进的AI写作平台,涵盖小说、学术、社交媒体等多场景。提供续写、改写、润色等功能,助力创作者高效优化写作流程。界面简洁,功能全面,适合各类写作者提升内容品质和工作效率。

AI辅助写作AI工具蛙蛙写作AI写作工具学术助手办公助手营销助手AI助手
问小白

问小白

全能AI智能助手,随时解答生活与工作的多样问题

问小白,由元石科技研发的AI智能助手,快速准确地解答各种生活和工作问题,包括但不限于搜索、规划和社交互动,帮助用户在日常生活中提高效率,轻松管理个人事务。

热门AI助手AI对话AI工具聊天机器人
Transly

Transly

实时语音翻译/同声传译工具

Transly是一个多场景的AI大语言模型驱动的同声传译、专业翻译助手,它拥有超精准的音频识别翻译能力,几乎零延迟的使用体验和支持多国语言可以让你带它走遍全球,无论你是留学生、商务人士、韩剧美剧爱好者,还是出国游玩、多国会议、跨国追星等等,都可以满足你所有需要同传的场景需求,线上线下通用,扫除语言障碍,让全世界的语言交流不再有国界。

讯飞智文

讯飞智文

一键生成PPT和Word,让学习生活更轻松

讯飞智文是一个利用 AI 技术的项目,能够帮助用户生成 PPT 以及各类文档。无论是商业领域的市场分析报告、年度目标制定,还是学生群体的职业生涯规划、实习避坑指南,亦或是活动策划、旅游攻略等内容,它都能提供支持,帮助用户精准表达,轻松呈现各种信息。

AI办公办公工具AI工具讯飞智文AI在线生成PPTAI撰写助手多语种文档生成AI自动配图热门
讯飞星火

讯飞星火

深度推理能力全新升级,全面对标OpenAI o1

科大讯飞的星火大模型,支持语言理解、知识问答和文本创作等多功能,适用于多种文件和业务场景,提升办公和日常生活的效率。讯飞星火是一个提供丰富智能服务的平台,涵盖科技资讯、图像创作、写作辅助、编程解答、科研文献解读等功能,能为不同需求的用户提供便捷高效的帮助,助力用户轻松获取信息、解决问题,满足多样化使用场景。

热门AI开发模型训练AI工具讯飞星火大模型智能问答内容创作多语种支持智慧生活
Spark-TTS

Spark-TTS

一种基于大语言模型的高效单流解耦语音令牌文本到语音合成模型

Spark-TTS 是一个基于 PyTorch 的开源文本到语音合成项目,由多个知名机构联合参与。该项目提供了高效的 LLM(大语言模型)驱动的语音合成方案,支持语音克隆和语音创建功能,可通过命令行界面(CLI)和 Web UI 两种方式使用。用户可以根据需求调整语音的性别、音高、速度等参数,生成高质量的语音。该项目适用于多种场景,如有声读物制作、智能语音助手开发等。

下拉加载更多