文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

9.6K Star!可扩展的富文本编辑框架!

2024-12-01 19:52

关注

Lexical 可以轻松创建复杂的文本编辑体验,否则使用内置浏览器工具会非常复杂,比如可以用来构建这些:

Lexical 具有以下特点:

支持以下浏览器:

项目地址:

https://github.com/facebook/lexical

几个重要的概念

编辑器实例

编辑器实例是将所有东西连接在一起的核心,可以将 contenteditable DOM 元素附加到编辑器实例上,注册和监听命令,更重要的是,编辑器允许更新其自身的 EditorState。

// 创建编辑器实例
createEditor()

编辑器状态

编辑器状态表示你希望在 DOM 上显示的内容的底层数据模型,包含两部分:

editor.update(() => {...})

可以将节点转换或命令处理程序作为钩子挂到 update 方法中,它们将作为更新流程的一部分而被调用,以防止更新的级联/瀑布式更新。

// 获取当前编辑器状态
editor.getEditorState()
// 编辑器状态可以被序列化成 JSON,通过该方法将 JSON 转换回实例对象
editor.parseEditorState()

编辑器更新

如果想要更改编辑器状态中的某些内容,必须通过更新操作来完成:

editor.update(() => {...})

传递给更新调用的闭包很重要,这是一个拥有活动中编辑器状态完整上下文的地方,它公开了对底层编辑器状态节点树的访问。

DOM 协调器

Lexical 有自己的 DOM 协调器,它采用一组编辑器状态(总是“当前”和“待定”)并在它们上应用“差异”。然后它使用此差异仅更新 DOM 中需要更改的部分,可以将其视为一种虚拟 DOM,使得 Lexical 能够跳过许多差异比较工作,因为它知道在给定更新中发生了哪些变化。

监听器、节点转换和命令

除了调用更新之外,使用 Lexical 完成的大部分工作是通过监听器、节点转换和命令完成的。这些操作都来自编辑器实例,以 register 开头。另一个重要特性是所有注册方法都返回一个函数以轻松取消订阅它们。

const unregisterListener = editor.registerUpdateListener(({editorState}) => {
console.log(editorState);
});

unregisterListener();

命令是用于将 Lexical 中的所有内容链接到一起的通信系统,当按键被触发或其他重要信号出现时,语法在内部调度命令,传入的命令按优先级通过所有处理程序进行传播,类似于浏览器的时间传播机制

// 创建自定义命令
createCommand()
// 发送到编辑器实例
editor.dispatchCommand(command, payload)
// 也可以直接注册命令
editor.registerCommand(handler, priority)

一个简单的例子

这个例子可以用来创建一个简单的富文本编辑器:

import "./styles.css";
import Editor from "./Editor";

export default function App() {
return (
<div className="App">
<h1>Rich Text Example</h1>
<p>Note: this is an experimental build of Lexical</p>
<Editor />
<div className="other">
<h2>Other Examples</h2>
<ul>
<li>
<a
href="https://codesandbox.io/s/lexical-plain-text-example-g932e"
target="_blank"
rel="noreferrer"
>
Plain text example
</a>
</li>
</ul>
</div>
</div>
);
}


来源:开源前哨内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯