如何清空Slate.JS编辑器中的所有文本?
如何清空Slate.JS编辑器内容
针对你遇到的清空Slate编辑器无效的问题,这里提供几种可靠的解决方法:
方法1:通过Transforms删除整个文档范围
你之前用Transforms.delete(editor, {})无效是因为未指定at参数,默认仅删除当前选区内容。可以通过获取整个文档的起始和结束位置,一次性删除全部内容:
import { Transforms, Editor } from 'slate'; const clearEditorContent = (editor) => { // 获取整个文档的选区范围 const fullRange = { anchor: Editor.start(editor, []), focus: Editor.end(editor, []), }; Transforms.delete(editor, { at: fullRange }); };
方法2:直接重置编辑器children
Slate编辑器的内容由editor.children控制,直接将其重置为初始状态(比如空段落),再强制归一化即可:
import { Editor } from 'slate'; const resetEditor = (editor) => { // 重置为单个空段落(可根据你的初始结构调整) editor.children = [{ type: 'paragraph', children: [{ text: '' }] }]; // 强制编辑器更新状态 Editor.normalize(editor, { force: true }); };
方法3:结合key重新渲染编辑器(修复你的原有尝试)
你之前尝试通过stateKey重新渲染但无效,是因为editor通过useMemo缓存时未依赖stateKey。修改useMemo的依赖数组,让stateKey变化时重新创建编辑器实例:
// 把stateKey加入useMemo依赖,每次key变化时重建editor const editor = useMemo(() => withHistory(withReact(createEditor())), [stateKey]);
之后只要更新stateKey(比如setStateKey(prev => prev + 1)),编辑器就会重新初始化,回到空白状态。
内容的提问来源于stack exchange,提问作者Steven Schwartz
相关产品推荐
相关产品推荐

