有一些纯文本内容需要插入才能存在textEditor,我尝试使用EditorState.push方法,我认为这适用于这种情况。 我尝试这样的事情:
const { ContentState: { createFromText }, EditorState: { createWithContent, push }} = DraftJS;
export const pushTextToCurrentEditorState = (text, editorState) => {
const textContentState = createFromText(text);
const newEditorState = push(editorState, textContentState, 'insert-characters');
// debugger;
console.log(editorStateToJSON(editorState))
console.log(editorStateToJSON(newEditorState))
return JSON.parse(editorStateToJSON(newEditorState));
}
结果是newEditorState
不是合并状态,而是替换一个较旧的editorState未命中,newEditorState
变成了全新的事物,例如从text
创建。
这是错误的用法吗?还是有其他解决方法?
答案 0 :(得分:0)
我烦了一个复杂的方法,但是解决了这个问题。代码在这里:
export const pushTextToCurrentEditorState = (text, editorState) => {
const textContentState = createFromText(text);
const textContentBlocksArr = textContentState.getBlocksAsArray();
const currentBlocksArr = editorState.getCurrentContent().getBlocksAsArray();
const newBlocksArr = currentBlocksArr.concat(textContentBlocksArr);
const newContentState = createFromBlockArray(newBlocksArr);
const newEditorState = createWithContent(newContentState);
return JSON.parse(editorStateToJSON(newEditorState));
}
方式: 1.将内容状态,文本转换为块数组; 2.将两个块数组组合在一起; 3.使用组合数组创建新的内容状态和编辑器状态; </ p>