CMS 需要一个好用的编辑器。Tiptap 是 ProseMirror 的 React 封装,扩展性极强。
为什么选 Tiptap
Tiptap 是基于 ProseMirror 的 React 富文本编辑器,相比其他方案:
- 无头设计:自带样式最小化,完全自定义 UI
- 扩展系统:每个功能都是独立的扩展,按需组合
- 类型安全:TypeScript 一等公民
- JSON 输出:内容存储为 JSON,不是 HTML,便于程序化处理
架构设计
RuiTool AI 的 Tiptap 编辑器分为四层:
| |
自定义节点:Alert Block
Alert Block 是一个带图标和颜色的提示块,支持 info、warning、error、success 四种类型:
| |
渲染组件:
| |
图片上传节点
图片上传节点集成了 CMS 媒体库选择器:
| |
Markdown 粘贴支持
用户从 Notion、Obsidian 等工具粘贴 Markdown 内容时,自动转换为 Tiptap 的 JSON 格式:
| |
工具栏组件化
每个工具栏按钮都是独立的组件,有自己的状态和逻辑:
| |
每个按钮都有对应的 Hook:
| |
总结
- 四层架构:UI → Node → Extension → Template
- 自定义节点(Alert Block)实现富文本业务组件
- 图片上传节点集成 CMS 媒体库
- Markdown 粘贴扩展让内容迁移更顺畅
- 工具栏按钮组件化,每个按钮独立可复用
