类 Vue 模板语法
v-if、v-for、v-model 与事件绑定保持直觉,不引入 VNode。
TypeScript 单文件组件,熟悉的模板语法,输出标准 Custom Elements
COMPONENT FIRST
v-if、v-for、v-model 与事件绑定保持直觉,不引入 VNode。
逻辑、模板与样式在一个 TypeScript 文件里定义,构建时完成编译。
需要 builder 或运行时字符串模板时,再引入 @elfui/chain。
静态结构在构建阶段确定,运行时不做整棵树 diff 或 patch。
从基础组件派生设计系统变体,复用定义而非复制实现。
输出标准 Custom Elements,可在任何前端栈中注册与使用。
COMPONENT INHERITANCE
import { useExtend, useVariant } from "@elfui/core";
export const PrimaryButton = useExtend(Button)
.name("primary-button")
.build();
export const DangerButton = useVariant(
Button, "danger-button", setDangerTone
).build();共享 props、事件与基础样式
改名并补充局部样式,得到职责明确的按钮。
沿用 Button 能力,只改颜色令牌与视觉语义。
ARCHITECTURE
| 维度 | ElfUI | Vue | React | Lit | Solid |
|---|---|---|---|---|---|
| 更新模型 | 编译期细粒度 DOM 更新 | 响应式 + VDOM | VDOM 协调 | 模板 part 更新 | 细粒度 DOM 更新 |
| 主要写法 | TS + HTML 模板宏 | SFC 模板 | JSX | 模板字面量 | JSX |
| 运行时 | 无 VNode / 无 patch | 组件运行时 | 协调器运行时 | 轻量模板运行时 | 细粒度运行时 |
| 输出形式 | 标准 Custom Elements | Vue 组件 | React 组件 | Web Components | JSX 组件 |
| 组件边界 | 浏览器原生标签 | 框架组件 | 框架组件 | 浏览器原生标签 | 框架组件 |
SIZE SNAPSHOT
BROWSER BENCHMARK
体积来自 2026-07-11 的发布前 size report;基准来自同日真实浏览器 smoke。它们用于追踪 ElfUI 自身回归,不是跨框架性能排名。
CORE PRINCIPLES
构建时拆分动态点。运行时没有 VNode,也不需要整棵组件树 diff。
import { defineHtml, useRef }
from "@elfui/core";
const count = useRef(0);
const increment = () =>
count.set(count.peek() + 1);
export const Counter = defineHtml(`
<button @click=${increment}>
Count: ${count}
</button>
`);识别文本、属性、事件、条件与列表。
为每个状态读取生成独立更新路径。
只订阅当前动态点真正读取的状态。
写入真实 DOM,注册为 Custom Element。
ECOSYSTEM
宏组件、应用挂载与主线用户 API。
↗02编译 TypeScript 宏组件并提供工程诊断。
↗03链式 builder 与运行时字符串模板扩展。
↗04VS Code 补全、诊断与宏组件开发体验。
↗$ npm i @elfui/core
$ npm i -D @elfui/vite-plugin