Lexical 是 Meta(原 Facebook)开源的下一代富文本编辑器框架,用来在 Web 中构建高性能、可扩展的 WYSIWYG(所见即所得)编辑器或类似 Notion、Google Docs 的文本编辑体验。
它强调 可组合、可扩展、类型安全、性能高,底层采用类似 React Fiber 的机制管理编辑状态。
高性能
可扩展
类型安全
模块化架构
支持受控或非受控
npm install lexical
通常还会用到官方 React 绑定:
npm install @lexical/react
import React from 'react';
import { LexicalComposer } from '@lexical/react/LexicalComposer';
import { RichTextPlugin } from '@lexical/react/LexicalRichTextPlugin';
import { ContentEditable } from '@lexical/react/LexicalContentEditable';
import { HistoryPlugin } from '@lexical/react/LexicalHistoryPlugin';
import { OnChangePlugin } from '@lexical/react/LexicalOnChangePlugin';
function Editor() {
const initialConfig = {
namespace: 'MyEditor',
onError: (error) => console.error(error),
theme: {
paragraph: 'editor-paragraph',
},
};
return (
<LexicalComposer initialConfig={initialConfig}>
<RichTextPlugin
contentEditable={<ContentEditable className="editor-input" />}
placeholder={<div className="editor-placeholder">输入点什么...</div>}
/>
<HistoryPlugin />
<OnChangePlugin onChange={(editorState) => {
editorState.read(() => {
// 读取当前编辑器内容
});
}} />
</LexicalComposer>
);
}
export default Editor;
说明:
LexicalComposer是编辑器的核心容器RichTextPlugin提供基础的段落、加粗、列表等功能HistoryPlugin提供撤销/重做OnChangePlugin监听内容变化
Lexical 的功能几乎都通过 插件 提供:
基础功能:
HistoryPlugin(撤销/重做)AutoFocusPlugin(自动聚焦)ClearEditorPlugin(清空内容)输入扩展:
MarkdownShortcutPlugin(支持输入 Markdown 自动转格式)ListPlugin(有序/无序列表)LinkPlugin(超链接)富文本增强:
CodeHighlightPlugin(代码高亮)TablePlugin(表格编辑)ImagesPlugin(图片插入)Lexical 的核心是 Node-based architecture:
你可以自定义 Node 来实现类似 Notion 的可拖拽模块。
优点:
缺点:
| 特性 | Draft.js | Slate.js | Quill | Lexical |
|---|---|---|---|---|
| 性能 | 中 | 中 | 中 | 高 |
| React 友好 | 高 | 高 | 中 | 高 |
| 可扩展性 | 中 | 高 | 低 | 高 |
| 学习曲线 | 中 | 高 | 低 | 中 |
| 官方维护状态 | 停滞 | 活跃 | 一般 | Meta 支持 |
总结: