第70期:Lexical - 编辑器中的 React

2024-08-18

富文本编辑器向来是前端的天坑之一,因为要处理各种 DOM 渲染、输入事件、输入法支持和浏览器兼容的问题,所以做出一个比较完善的编辑器是个工作量很大又很有难度的事。Lexical 是 Meta 开源的文本编辑器框架,它带来了一些新的思路,能够解决一些以往的痛点问题,注意它只是用于开发编辑器的框架,而不是编辑器本身。

如果把传统的富文本编辑器,如 TinyMCE、UEditor 等,比作前端框架中的 jQuery 的话,那么 Lexical 就是 React。最大的区别就是 Lexical 不需要开发者手动去操作 DOM 节点,只需要关心编辑器的状态即可,Lexical 会自动把状态渲染为相应的 DOM 节点。

简单了解一下 Lexical 中的一些概念:

简单了解这些概念后,很明显能感知到 Lexical 的优势,更现代化的架构给开发者带来了更好的开发体验,同时也有着更高的自由度去实现更多更有趣的功能,类似 React 的虚拟 DOM 架构也带来了更好的性能和更灵活的状态管理方式,另外状态与真实 DOM 的解耦也为跨平台带来了可能性,Lexical 官方也提供了 iOS 版本。

无论你在任何场景下需要一个编辑器,都推荐你试试 Lexical,它可以很灵活地实现你所需的功能,而不需要像其他编辑器一样,在不满足需求的时候需要各种 hack 的方式去修改,当然 Lexical 做不到开箱即用,需要多一点开发量。


技术

计算机教育中缺失的一课

这是一个系列课程,内容包含命令行、编辑器、Git 等,都是程序员必须要具备的、但大学教育中又不会提到的内容,该课程每节讲述一个工具,并且内容也都比较简短。

Lobe Chat Wiki

Lobe Chat 是一个开源的 AI 聊天机器人框架,在他们的 GitHub Wiki 上详细介绍了该项目的架构设计、代码风格、相关 API 实现逻辑、开发上手指南等,内容很丰富,无论是否参与开发该项目,都可以从中学习到一些东西用于其他项目。

Node.js 实验性支持 TypeScript

Node.js 近期合并了一个实验性支持 TypeScript 的 PR,开发者只需要添加 --experimental-strip-types flag 就可以在 Node.js 中直接执行 TypeScript 文件,Node.js 会自动将 TypeScript 转译为 JavaScript,但这个过程不会做类型检查,而是直接将类型移除。

开源

Luxe

又一个复制粘贴式的组件库,基于 TailwindCSS 和 framer-motion 实现,目前组件还比较少,但都很精致,相较于其他组件库,它的动画效果更丰富。

convertfast-ui

convertfast-ui 是一个用于创建 landing page 的工具,它的灵感来自于 shadcn/ui,也基于 shadcn/ui 实现,所以用法也是类似的。它本质上是提供了一些模块,比如导航栏、Logo 云、CTA、价格模块等,你可以将这些模块自由组合成一个页面。

nuqs

nuqs 是 next-usequerystate 的缩写,是一个用于 Next.js 的、类型安全的搜索参数管理库,它可以以类型安全的方式从 URL 的查询字符串中读取参数,也可以将参数同步到 URL 中,类似于 React 的 useState,但状态是保存在 URL 中的。

产品

Popsy

Popsy 是一个无代码建站工具,交互形式与 Notion 类似,并且提供了一些图标和插画。它一定程度上摆脱了其他同类产品中的“程序员思维”,编辑一个页面像是在编辑一篇文档,大大降低了用户的理解成本和使用成本。

Plunk

Plunk 是一个开源的邮件平台,底层基于 AWS 的 SES 服务,可以理解为 SendGrid、Resend 的开源替代品,除了可以使用它提供的云服务,也可以自行部署。

ray.so

由 Raycast 开发的一个工具站,功能包含代码生成图片、制作图标、Raycast 主题等,并且该工具站是完全开源的,基于 Next.js 开发。