setEditorState未获取到最后输入字符的问题咨询
问题分析与解决方案
你的问题核心在于React setState的异步特性:当你在onEditorStateChanged里调用setEditorState(editor)后,组件的editorState并不会立即更新,此时你用editorState.getCurrentContent()拿到的还是更新前的旧状态,所以获取不到最后输入的字符。
你说“无需使用回调或等待编辑器状态的机制”其实是对的——不需要额外加回调或等待逻辑,但你得用对数据来源:onEditorStateChange回调函数的editor参数本身就是最新的EditorState实例,直接用它来获取内容就可以,完全不用等组件state更新。
修改后的代码应该是这样:
const onEditorStateChanged = (editor) => { setEditorState(editor); // 直接用回调传入的editor参数,而不是组件的editorState props.giveMeTextOnly(editor.getCurrentContent().getPlainText()); props.onStateChange( draftToHtml(convertToRaw(editor.getCurrentContent())), ); } <Editor editorState={editorState} onEditorStateChange={onEditorStateChanged} // onContentStateChange={onContentStateChange} editorStyle={{ padding: '0 20px' }} placeholder="Type here..." />
这样修改后,每次输入的最新字符都会被正确捕获,因为你直接使用了回调提供的最新状态,绕开了setState异步更新的问题,完全不需要额外的等待或回调机制,符合你的预期。
内容的提问来源于stack exchange,提问作者Maseed
相关产品推荐
相关产品推荐

