如何将内容状态推送到当前编辑器状态? editorState.push方法似乎对我不起作用?

时间:2019-07-05 10:33:44

标签: draftjs react-draft-wysiwyg

有一些纯文本内容需要插入才能存在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创建。 这是错误的用法吗?还是有其他解决方法?

1 个答案:

答案 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>