Meta的开源力作:Lexical框架,富文本的未来

简介: Meta的开源力作:Lexical框架,富文本的未来

image.png

引言

Lexical 是一个由 Facebook(现在称为 Meta)开源的可扩展 JavaScript Web 文本编辑器框架。

这个框架特别强调了三个核心特性:可靠性、可访问性以及高性能。

旨在为开发者创造最优的开发体验。

以下是 Lexical 框架的几个关键特点和能力:

可扩展性:

Lexical 的设计允许开发者轻松地创建从简单到极为复杂的文本编辑器。

其架构高度可扩展,意味着你可以根据需求添加自定义功能,比如富文本格式、Markdown 支持、自定义UI组件(如工具栏)等,而这一切都可以通过扩展插件来实现。

可靠性:

框架的核心关注点之一是确保编辑器在各种条件下都能稳定工作,减少崩溃或数据丢失的风险,这对于提升用户体验至关重要。

可访问性:

Lexical 内置了对可访问性的支持,确保创建的编辑器能够被广泛的用户群体所使用,包括那些依赖辅助技术的用户。

高性能:

优化的内部机制使得 Lexical 能够处理大规模的文本编辑任务而不牺牲响应速度,这对于提升用户交互体验非常关键。

与React集成:

虽然 Lexical 并不仅限于 React,但它提供了与 React 深度集成的能力,使得在 React 应用中使用Lexical变得非常直接。同时,理论上它也可以支持任何基于DOM的前端库,只要有相应的绑定实现。

开发者体验:

Lexical 致力于简化开发流程,让开发者能够快速原型设计并充满信心地构建功能。这包括清晰的文档、丰富的示例代码以及易于理解的 API 设计。

模块化和可定制:

框架的模块化设计意味着你可以按需加载功能,只引入你真正需要的部分,从而保持最终应用的轻量级。

Lexical 的核心尽量做到最小化。

Lexical 并不直接关注单体编辑器倾向于做的事情——例如 UI 组件、工具栏或富文本功能。

相反,这些功能的逻辑可以通过插件接口包含在内,并在需要时使用。

这确保了极大的可扩展性并将代码大小保持在最低限度。

github:github.com/facebook/le…

官方 playground 预览:

image.png

功能介绍

基本功能

基本功能包括:多级标题、字体、撤销、回退、字体大小、加粗、斜体、链接、字体颜色、字体背景、图片、表格、待办、有序列表、无序列表、水平线、引用

特色功能

分页

image.png

DOM结构树(命令模式)

image.png

绘图

image.png

便签

image.png

安装

React

将React放第一是因为官方在UI层已基于React封装好了所有的组件,开箱即用。

安装 lexical 核心包与 lexical/react 扩展包:

npm install --save lexical @lexical/react

创建一个 React 组件,添加如下内容:

import {$getRoot, $getSelection} from 'lexical';
    import {useEffect} from 'react';
    import {AutoFocusPlugin} from '@lexical/react/LexicalAutoFocusPlugin';
    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 {LexicalErrorBoundary} from '@lexical/react/LexicalErrorBoundary';
    function onError(error) {
      console.error(error);
    }
    function Editor() {
      const initialConfig = {
        namespace: 'MyEditor',
        theme:{
        // 自定义各组件样式名
      },
        onError,
      };
      return (
        <LexicalComposer initialConfig={initialConfig}>
          <RichTextPlugin
            contentEditable={<ContentEditable />}
            placeholder={<div>请输入内容...</div>}
            ErrorBoundary={LexicalErrorBoundary}
          />
          <HistoryPlugin />
          <AutoFocusPlugin />
        </LexicalComposer>
      );
    }

这里还有个坑,如果大家在这时通过浏览器预览组件,会发现页面上就只有一个输入框。

这是因为官方团队并未将 lexical 需要的全局 css样式 封装进组件,需要大家手动添加,样式文件地址:

github.com/facebook/le…

这里在列举一些常用组件,大家可以按需引入:

<ToolbarPlugin /> // 工具栏
<DragDropPaste /> // 拖放粘贴
<AutoFocusPlugin /> // 自动聚焦
<AutoLinkPlugin /> // 自动链接
<ListPlugin /> // 列表
<CheckListPlugin /> // 代办
<CodeHighlightPlugin /> // 代码块
<TabIndentationPlugin /> // 缩进
<LinkPlugin /> // 链接
<HorizontalRulePlugin /> // 水平线
<PageBreakPlugin /> // 翻页
<ImagesPlugin /> // 图片
<TablePlugin /> // 表格

上述提到的组件均可在 lexical-playground 中找到,附上地址:

github.com/facebook/le…

效果如下:

image.png

Vue

官方并没有提供 Vue 版本,不过在 github 上已经有开发者使用 TS 完成了其 Vue 版本的基础封装。

github: github.com/wobsoriano/…

安装:

npm install lexical lexical-vue # or pnpm or yarn

组件的使用都大同小异,这里省略了部分,仅保留核心代码示意:

<script setup lang="ts">
    import {
      ...
      LexicalRichTextPlugin,
    } from 'lexical-vue'
    </script>
    <template>
      <ToolbarPlugin />
      <div class="editor-container">
        <div className="editor-inner">
          <LexicalRichTextPlugin>
            <template #contentEditable>
              <div class="editor-scroller">
                <div class="editor">
                  <ContentEditable />
                </div>
              </div>
            </template>
            <template #placeholder>
              <div class="editor-placeholder">
                Enter some text...
              </div>
            </template>
        </div>
      </div>
    </template>


vue版本的 playground 地址:

github.com/wobsoriano/…

原生JS

使用原生JS需要自己来完成UI层的所有工作,如果大家在UI上没有定制化需求,不建议使用原生。

这里附上原生接入方式;lexical.dev/docs/gettin…

扩展

Lexical 的核心在于其插件架构。

每个功能(如自动完成、拼写检查、格式化等)通常都是作为插件存在的。

开发者可以通过创建或修改插件来增加新功能或调整现有行为。

创建自定义插件

定义插件类:首先,你需要创建一个新的插件类,继承自 Lexical 提供的基类,如 LexicalPlugin 。

实现生命周期方法:大多数插件需要实现特定的生命周期方法,如初始化(initialize)、订阅编辑器事件(subscribe)和清理(dispose)。

注册插件:在编辑器实例化时,通过编辑器的配置选项将你的插件注册进去。

这里提供一个官方的React扩展示例:

function MyOnChangePlugin({ onChange }) {
  const [editor] = useLexicalComposerContext();
  useEffect(() => {
    return editor.registerUpdateListener(({editorState}) => {
      onChange(editorState);
    });
  }, [editor, onChange]);
  return null;
}
function Editor() {
  // ...
  const [editorState, setEditorState] = useState();
  function onChange(editorState) {
    const editorStateJSON = editorState.toJSON();
    setEditorState(JSON.stringify(editorStateJSON));
  }
  return (
    <LexicalComposer initialConfig={initialConfig}>
      {/*...*/}
      <MyOnChangePlugin onChange={onChange}/>
    </LexicalComposer>
  );


总结

我们介绍了 lexical 的 React、Vue和原生JS的安装,并按照接入的难易程度推荐了使用方式,然后了解基本的插件扩展流程,相信大家对lexical已经有了一定的了解。

本文是对Lexical的基本介绍,所以文中并未提到lexical中例如核心生命周期、事件的派发与注册、协同扩展等,大家在需要的场景可自行研究。


相关文章
|
Web App开发 JavaScript 前端开发
2023Node.js零基础教程(小白友好型),nodejs新手到高手,(一)NodeJS入门
2023Node.js零基础教程(小白友好型),nodejs新手到高手,(一)NodeJS入门
1191 0
|
6月前
|
人工智能 自然语言处理 安全
Claude Code 全攻略:命令大全 + 实战工作流(建议收藏)
本文介绍了Claude Code终端AI助手的使用指南,主要内容包括:1)常用命令如版本查看、项目启动和更新;2)三种工作模式切换及界面说明;3)核心功能指令速查表,包含初始化、压缩对话、清除历史等操作;4)详细解析了/init、/help、/clear、/compact、/memory等关键命令的使用场景和语法。文章通过丰富的界面截图和场景示例,帮助开发者快速掌握如何通过命令行和交互界面高效使用Claude Code进行项目开发,特别强调了CLAUDE.md文件作为项目知识库的核心作用。
51293 73
Claude Code 全攻略:命令大全 + 实战工作流(建议收藏)
|
8月前
|
人工智能 自然语言处理 API
AI Agent 职业路线全解析:从入门到专家的能力图谱与进阶路径
大模型正从文本生成迈向AI Agent时代,核心范式由“预测下一个词”升级为“预测下一个动作”。AI Agent工程师聚焦自主闭环系统构建,需掌握推理框架、记忆设计、API集成与多智能体协作四大能力,职业路径覆盖应用层、系统层到专家层,是认知自动化与下一代软件工程的核心赛道。(239字)
801 2
|
3月前
|
人工智能 BI API
2026 最新版通义千问付费版全功能介绍
通义千问付费体系含Pro会员、API按量付费、企业团队版三大模块,基于Qwen3.7旗舰模型,全面升级算力、文件处理、多模态与商用权限。覆盖个人创作、开发者集成及政企数字化场景,实现从日常辅助到AI生产底座的全链路赋能。(239字)
|
11月前
|
机器学习/深度学习 人工智能 前端开发
终端里的 AI 编程助手:OpenCode 使用指南
OpenCode 是开源的终端 AI 编码助手,支持 Claude、GPT-4 等模型,可在命令行完成代码编写、Bug 修复、项目重构。提供原生终端界面和上下文感知能力,适合全栈开发者和终端用户使用。
61093 11
vue3+Ts 二次封装ElementUI form表单
【10月更文挑战第8天】
1545 59
|
弹性计算 监控 JavaScript
云效Flow:打造高效、稳定的CI/CD流程实战指南
【10月更文挑战第7天】本文介绍了“云效Flow”这一CI/CD工具,通过实际案例展示了其在Node.js项目中的应用,包括自动化构建、测试及部署流程。云效Flow支持多种开发语言与框架,集成第三方服务,提供详尽的新手引导,简化了CI/CD流程的搭建,提升了开发效率与软件质量,特别适合初创团队和大型企业使用。
1035 4
|
JavaScript 前端开发 数据安全/隐私保护
npm账户需要登录问题npm error probably out of date. To correct this please try logging in again with优雅草央千澈解决方案
npm账户需要登录问题npm error probably out of date. To correct this please try logging in again with优雅草央千澈解决方案
2801 0
npm账户需要登录问题npm error probably out of date. To correct this please try logging in again with优雅草央千澈解决方案
|
JSON 小程序 前端开发
towxml的使用,在微信小程序中快速将markdown格式渲染为wxml文本
本文介绍了在微信小程序中使用`towxml`库将Markdown格式文本渲染为WXML的方法。文章提供了`towxml`的概述、安装步骤、以及如何在小程序中配置和使用`towxml`进行Markdown解析的详细说明和代码示例。
|
Web App开发 编解码 安全
零基础快速入门WebRTC:基本概念、关键技术、与WebSocket的区别等
本文主要分享了WebRTC的基本概念、关键技术术语(包括NAT、STUN、TURN、ICE、SDP 和信令),着重讲解了WebRTC是如何实现P2P通信以及WebRTC信令的作用,同时讨论了WebRTC在技术上的优势和劣势,最后还提供了一个简单的WebRTC Demo代码。
2412 0
零基础快速入门WebRTC:基本概念、关键技术、与WebSocket的区别等

热门文章

最新文章