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

image

引言

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

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

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

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

可扩展性

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

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

可靠性

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

可访问性

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

高性能

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

与React集成

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

开发者体验

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

模块化和可定制

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

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

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

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

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

github:https://github.com/facebook/lexical

官方 playground 预览:
在这里插入图片描述

功能介绍

基本功能

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

特色功能

分页
image

DOM结构树(命令模式)

image

绘图

image

便签

image

安装

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样式 封装进组件,需要大家手动添加,样式文件地址:

https://github.com/facebook/lexical/blob/main/packages/lexical-playground/src/index.css

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

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

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

https://github.com/facebook/lexical/blob/main/packages/lexical-playground

效果如下:

image

Vue

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

github: https://github.com/wobsoriano/lexical-vue

安装:

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 地址:

https://github.com/wobsoriano/lexical-vue/tree/main/playground

原生JS

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

这里附上原生接入方式;https://lexical.dev/docs/getting-started/quick-start

扩展

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>
  );

总结

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

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

– 欢迎点赞、关注、转发、收藏【我码玄黄】,gonghao同名

  • 16
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
智慧农业是一种结合了现代信息技术,包括物联网、大数据、云计算等,对农业生产过程进行智能化管理和监控的新模式。它通过各种传感器和设备采集农业生产中的关键数据,如大气、土壤和水质参数,以及生物生长状态等,实现远程诊断和精准调控。智慧农业的核心价值在于提高农业生产效率,保障食品安全,实现资源的可持续利用,并为农业产业的转型升级提供支持。 智慧农业的实现依赖于多个子系统,包括但不限于设施蔬菜精细化种植管理系统、农业技术资料库、数据采集系统、防伪防串货系统、食品安全与质量追溯系统、应急追溯系统、灾情疫情防控系统、农业工作管理系统、远程诊断系统、监控中心、环境监测系统、智能环境控制系统等。这些系统共同构成了一个综合的信息管理和服务平台,使得农业生产者能够基于数据做出更加科学的决策。 数据采集是智慧农业的基础。通过手工录入、传感器自动采集、移动端录入、条码/RFID扫描录入、拍照录入以及GPS和遥感技术等多种方式,智慧农业系统能够全面收集农业生产过程中的各种数据。这些数据不仅包括环境参数,还涵盖了生长状态、加工保存、检验检疫等环节,为农业生产提供了全面的数据支持。 智慧农业的应用前景广阔,它不仅能够提升农业生产的管理水平,还能够通过各种应用系统,如库房管理、无公害监控、物资管理、成本控制等,为农业生产者提供全面的服务。此外,智慧农业还能够支持政府监管,通过发病报告、投入品报告、死亡报告等,加强农业产品的安全管理和质量控制。 面对智慧农业的建设和发展,存在一些挑战,如投资成本高、生产过程标准化难度大、数据采集和监测的技术难题等。为了克服这些挑战,需要政府、企业和相关机构的共同努力,通过政策支持、技术创新和教育培训等手段,推动智慧农业的健康发展。智慧农业的建设需要明确建设目的,选择合适的系统模块,并制定合理的设备布署方案,以实现农业生产的智能化、精准化和高效化。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

我码玄黄

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值