Lexical

Facebook 开源的文本编辑器框架
授权协议 MIT
开发语言 JavaScript
所属分类 Web应用开发、 响应式 Web 框架
软件类型 开源软件
地区 不详
投 递 者 宫瀚
操作系统 跨平台
开源组织
适用人群 未知
 软件概览

注意:Lexical 目前处于早期开发阶段,API 和包可能会经常更改。

Lexical 是一个可扩展的 JavaScript Web 文本编辑器框架,强调可靠性、可访问性和性能。 Lexical 旨在提供一流的开发人员体验,因此用户可以轻松地制作原型并构建功能。结合高度可扩展的架构,Lexical 允许开发者创建编辑器,并在规模和功能上进行扩展。

以下是可以使用 Lexical 执行哪些操作的一些示例:

开始使用 React

注意:Lexical 不仅限于 React。 一旦创建了该库的绑定,Lexical 就可以支持任何基于 DOM 的底层库。

安装 lexical@lexical/react:

npm install --save lexical @lexical/react

下面是一个使用 lexical@lexical/react纯文本编辑器的示例

import {$getRoot, $getSelection} from 'lexical';
import {useEffect} from 'react';

import LexicalComposer from '@lexical/react/LexicalComposer';
import LexicalPlainTextPlugin from '@lexical/react/LexicalPlainTextPlugin';
import LexicalContentEditable from '@lexical/react/LexicalContentEditable';
import {HistoryPlugin} from '@lexical/react/LexicalHistoryPlugin';
import LexicalOnChangePlugin from '@lexical/react/LexicalOnChangePlugin';
import {useLexicalComposerContext} from '@lexical/react/LexicalComposerContext';

const theme = {
  // Theme styling goes here
  ...
}

// When the editor changes, you can get notified via the
// LexicalOnChangePlugin!
function onChange(editorState) {
  editorState.read(() => {
    // Read the contents of the EditorState here.
    const root = $getRoot();
    const selection = $getSelection();

    console.log(root, selection);
  });
}

// Lexical React plugins are React components, which makes them
// highly composable. Furthermore, you can lazy load plugins if
// desired, so you don't pay the cost for plugins until you
// actually use them.
function MyCustomAutoFocusPlugin() {
  const [editor] = useLexicalComposerContext();

  useEffect(() => {
    // Focus the editor when the effect fires!
    editor.focus();
  }, [editor]);

  return null;
}

// Catch any errors that occur during Lexical updates and log them
// or throw them as needed. If you don't throw them, Lexical will
// try to recover gracefully without losing user data.
function onError(error) {
  console.error(error);
}

function Editor() {
  const initialConfig = {
    theme,
    onError,
  };

  return (
    <LexicalComposer initialConfig={initialConfig}>
      <LexicalPlainTextPlugin
        contentEditable={<LexicalContentEditable />}
        placeholder={<div>Enter some text...</div>}
      />
      <LexicalOnChangePlugin onChange={onChange} />
      <HistoryPlugin />
      <MyCustomAutoFocusPlugin />
    </LexicalComposer>
  );
}

Lexical 是一个框架

Lexical 的核心是一个无依赖的文本编辑器框架。在设计上,Lexical 的核心尽量做到最小化。它将各个功能的逻辑通过插件接口包含在内,并在需要时使用。这确保了极大的可扩展性并将代码大小保持在最低限度。

为 Lexical 做贡献

  1. 克隆此仓库

  2. 安装依赖项

    • npm install
  3. 启动本地服务器并运行测试

    • npm run start
    • npm run test
      • 服务器需要为 e2e 测试运行

可选,但推荐使用 VS Code 进行开发

  1. 下载并安装 VSCode

  2. 安装扩展

    • Flow 语言支持
      • 确保遵循文件中的设置步骤
    • Prettier
      • 将 prettier 设置为默认格式化程序 editor.defaultFormatter
      • 可选:在保存 editor.formatOnSave 时设置格式
    • ESlint
  • 定义 (来自维基百科) 词法分析(英语:lexical analysis)是计算机科学中将字符序列转换为标记(token)序列的过程。进行词法分析的程序或者函数叫作词法分析器(lexical analyzer,简称lexer),也叫扫描器(scanner)。词法分析器一般以函数的形式存在,供语法分析器调用。 任务描述 为下面指定的简单编程语言创建一个词法分析器。 程序应从文件和/或stdin读取输

  • 1.C语言中的数值类型转换 在 C 语言中提供了几个标准库函数,可以将字符串与整型,浮点型等进行转换。 atof() 将字符串转换为双精度浮点型值 atoi() 将字符串转换为整型值 atol() 将字符串转换为长整型值 itoa() 将整型值转换为字符串 gcvt() 将浮点数类型值转换为字符串 C/C++ 中提供的像 atoi,itoa,atof,gcvt 等这些函数都是可以实现字符串

  • 问题: 写代码的时候突然报了 Unexpected lexical declaration in case block. 的错误 描述: 今天在写代码的时候突然报错了Unexpected lexical declaration in case block.,开始有点闷,后来发现把类型定义写在了switch里面,错误代码如下: switch (item.value) { // 整理 case R

  • 前言 mybatis进行保存时,报错 错误信息 org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.builder.BuilderException: Error evaluating expression 'wxUnionid !=null'. Cause: org.apache.iba

  • 前言 报错 错误信息 [2020-12-15 13:56:33] -- [INFO ]: [com.xxxx.phb.exception.ExceptionHandlerAdvice]<

 相关资料
  • Django集成UEditor (封装成应用) 百度富文本编辑器 http://ueditor.baidu.com/website/ 使用效果 测试环境 ubuntu 16.04 python3.5.2 django1.11.7 目前测试解决了出现的以下两个问题,都是python版本问题 error1 # name 'file' is not defined controller.py 68行

  • JOE  ( Joe's Owner Editor) 是一个非常著名的基于 Linux 控制台下的文本编辑器

  • 在 Linux 中,就像任何类 Unix 操作系统,一切都只是文件。而 Unix 哲学指出,配置文件必须是人类可读和可编辑的。在几乎所有的情况下,它们只是纯文本。所以,首先,你必须学习如何编辑文本文件。 为此,我强烈建议你学习 vim 的基础知识,这是在 Linux 中处理文本的最强大的工具之一。Vim 是由 Bill Joy 于 1976 年编写的,vi 的重新实现。vi 实现了一个非常成功的概

  • 在Python的交互式命令行写程序,好处是一下就能得到结果,坏处是没法保存,下次还想运行的时候,还得再敲一遍。 所以,实际开发的时候,我们总是使用一个文本编辑器来写代码,写完了,保存为一个文件,这样,程序就可以反复运行了。 现在,我们就把上次的'hello, world'程序用文本编辑器写出来,保存下来。 那么问题来了:文本编辑器到底哪家强? 推荐两款文本编辑器: 一个是Sublime Text,

  • 在Python的交互式命令行写程序,好处是一下就能得到结果,坏处是没法保存,下次还想运行的时候,还得再敲一遍。 所以,实际开发的时候,我们总是使用一个文本编辑器来写代码,写完了,保存为一个文件,这样,程序就可以反复运行了。 现在,我们就把上次的'hello, world'程序用文本编辑器写出来,保存下来。 那么问题来了:文本编辑器到底哪家强? Visual Studio Code! 我们推荐微软出

  • 本文向大家介绍JS开发 富文本编辑器TinyMCE详解,包括了JS开发 富文本编辑器TinyMCE详解的使用技巧和注意事项,需要的朋友参考一下 一、题外话 最近负责了一个cms网站的运维,里面存在很多和编辑器有关的问题,比如编辑一些新闻博客,论文模块。系统采用的是FCKEditor,自我感觉不是很好,如下图 特别是在用户想插入一个图片的话,就很麻烦,所有用户共享一个文件目录,这样就不好了,于是便想

  • 问题内容: 我正在寻找有关如何使用GWT 2.1编辑器框架的 文档或示例。Google的文档非常少。 从有限的可用文档中,我已经能够得知,编辑器(理论上)将使您能够更轻松地将GUI元素绑定到数据模型。这将减轻将数据复制到TextArea / ListBox / CheckBox,然后将用户的更改复制回基础模型(最终是数据库)的非常常见的任务。 如果确实做到了这一点,将非常受欢迎。目前,我还不知道如

  • 问题内容: 好。简单的问题。也许不是那么简单的答案: 我有一个用Java下载的文件,我知道这是一个文本文件。无论默认文本编辑器是什么,有什么方法可以使用Java打开该文本文件?它必须适用于所有操作系统,否则我只能使用记事本打开它。 :\我猜想如果没有办法,我可以使用JOptionPane并显示文本文件的内容… 问题答案: 您可以执行以下操作: 这链接到java.awt.Desktop上的教程文章: