react-codemirror2的作者在这里。我偶然发现了您的问题,并想跟进详细的答案,因为3.x中有一些重大变化。该组件现在附带一个基于不同用例的变体UnControlled
。Controlled
我看到你setState
在onBeforeChange
回调中打电话。在你的情况下,我建议利用受控组件......
import {Controlled as CodeMirror} from 'react-codemirror2'
<CodeMirror
value={this.state.value}
options={options}
onBeforeChange={(editor, data, value) => {
this.setState({value}); // must be managed here
}}
onChange={(editor, metadata, value) => {
// final value, no need to setState here
}}
/>
使用受控变体,需要在道具上管理状态value
以查看任何更改。
此外,该UnControlled
组件也有一个onBeforeChange
回调,但具有不同的行为......
import {UnControlled as CodeMirror} from 'react-codemirror2'
<CodeMirror
value={value}
options={options}
onBeforeChange={(editor, data, value, next) => {
// hook to do whatever
next();
}}
onChange={(editor, metadata, value) => {
}}
/>
然而,在这里,如果指定,onChange
将被推迟到next
被调用onBeforeChange
。如果没有,onChange
无论如何都会开火。不过需要注意的是,使用UnControlled
变体时,编辑器将始终对输入更改做出反应——区别只是是否onChange
被调用。
这些更改的灵感来自于社区的需求,我鼓励您打开一个问题,如果任何事情都没有按您的预期工作。