draft 学习笔记
draft 学习笔记
draft.js 是 facebook 的一个基于 react 的 编辑器 类库.它强于一般的 编辑器/富文本编辑器 插件或组件.
- draft.js 提供的数据结构&工具方法, 可以非常快速方便得在 draft.js 上层构建一个功能完善的富文本编辑器.
因此 draft.js 不是普通的富文本编辑器, 他是构成富文本编辑器的基础设施
背景
hcm 项目中需要使用到富文本编辑器, 用于编辑一个邮件模板.
邮件模板中就会存在变量, 通常是用特殊符号包裹起来的一小块, 如我做的项目中的 ${variable}
,用 ${}
包裹起来.
需求: 为了更清晰地看到整个模板中, 变量的位置, ${}
包裹起来的文本需要高亮显示.
由于之前使用的富文本编辑器 froala-react-wysiwyg 不能完美兼容 react, 并且实现这个需求的过程存在不少坑:
- 性能问题: 每次输入都要正则匹配全部的内容 (这里已经通过动作延迟, 优化了部分性能)
- undo/redo栈丢失: 正则匹配完, 并重新设置富文本编辑器内容, 会造成 undo/redo 栈丢失
- 输入光标位置重置: 每次重置富文本编辑器内容, 都会丢失光标位置, 这一点是硬伤无法解决
因此, 从任何角度讲我都要寻找下一个, 更优秀的富文本编辑器.
基本介绍
大致了解 draft.js 并查看了一两个 demo, 我就已经发现, 使用 draft.js 要实现我上面描述的需求简直太简单了.
大致就如这个 myeditor demo 所示.
相关资料
最终, 我说的需求被砍掉了, PM 也不希望我现在就花时间进行优化.
所以, 我找到了解决方案, 但是没有时间和心力编写组件或者 demo.期待有时间提出优化吧.
This blog is under a CC BY-NC-SA 3.0 Unported License
本文链接:http://teeeemoji.xyz/2017/10/17/learn-draft/