无法在 draft.js 中设置 editorState(它看起来不可变但没有错误)

Can't set editorState in draft.js (it appears immutable but with no error)

我已经使用 convertToRaw 将内容保存到数据库中,我正在尝试将其加载回 draft.js 编辑器,以使用户能够重新编辑内容。

draft.js 编辑器包含在基于 react-modal 的组件中,当用户在内容上单击 'edit' 时显示该组件。这很重要,因为模态框(和编辑器)不会重新实例化,它们只是显示和隐藏。

编辑器在 (ES6) class 构造函数中启动一次,只需使用:

this.state = {editorState: EditorState.createEmpty()}

当用户单击 'edit' 我从数据库加载原始内容,然后我尝试使用以下多种变体将我的原始内容加载到编辑器中:

const contentState = convertFromRaw(rawContent)
const newEditorState = EditorState.push(this.state.editorState, contentState);
this.setState({editorState: newEditorState})

但是,虽然 newEditorState 显然包含正确的内容,this.setState({editorState: newEditorState}) 似乎对组件(或编辑器)的状态没有任何影响。

如何为编辑器设置新状态?谢谢!

更新 在进一步调查中,显然 this.setState({editorState: newEditorState}) 仅针对编辑器组件失败。

我已经通过设置测试状态 属性 并成功更新它进行了测试,而 editorState 保持不变。

为了对此进行全面测试,在我的构造函数中,我使用测试值初始化了状态:

this.state = { 
    editorState:EditorState.createWithContent(ContentState.createFromText('Hello')),
    testVal: 'Test Val 1'
}

然后我写了一些测试代码来展示 setState 如何对我的测试值起作用,但对 draft.js editorState 不起作用:

const newEditorState = EditorState.createWithContent(ContentState.createFromText('Goodbye'))
console.log('Before setState')
console.log('newEditorState: ' + newEditorState.getCurrentContent().getPlainText());
console.log('editorState: ' + this.state.editorState.getCurrentContent().getPlainText());
console.log('testVal: ' + this.state.testVal);

this.setState({editorState: newEditorState, testVal: 'Test Val 2'}, function(){
    console.log('After setState')
    console.log('editorState: ' + this.state.editorState.getCurrentContent().getPlainText());
    console.log('testVal: ' + this.state.testVal);
});

控制台输出如下:

Before setState
    newEditorState: Goodbye
    editorState: Hello
    testVal: Test Val 1
After setState
    editorState: Hello
    testVal: Test Val 2

我不明白为什么 draft.js editorState 在 testVal 更新时没有更新?

我在我的项目中使用了以下内容

const blocks = convertFromRaw(props.rawBlocks);
editorState = EditorState.createWithContent(blocks, null);

好的,我已经找到问题所在了。

在尝试调用 setState().

之后,我立即将焦点设置到编辑器上

即我在编辑器上调用 focus(),通过将 focus() 调用移动到 之前 我尝试设置状态,一切正常。显然接受焦点对 editorState 有影响。