具有 ReactJS 的 Ace 编辑器 - 撤消功能

Ace editor with ReactJS - undo functionality

我正在使用 Ace 编辑器和 React(https://github.com/securingsincity/react-ace,版本:8.0.0)

我已经成功添加了撤消按钮,但是在新的编辑器实例上撤消就是擦除整个文档。

到目前为止我的代码:

class AceEditor extends React.Component {

  constructor(props, context) {
    super(props, context);

    this.editor = React.createRef();
  }

  componentDidMount() {
    this.setState({
      code: "Test text"
    })
  }

  render() {
    const {code} = this.state;

    return (
      <div>
        <Button onClick={() => {
          this.editor.current.editor.undo()
        }}/>

        <AceEditor
          ref={this.editor}
          value={code}
          // more props
          onLoad={editor => {
            const session = editor.getSession();
            const undoManager = session.getUndoManager();
            undoManager.reset();
            session.setUndoManager(undoManager);
          }}
        />
      </div>
    );
  }
}

我错过了什么,有什么解决方法吗?

发生这种情况是因为在处理 value={code} 之前调用了 onload,一个 hacky 解决方法是:

onLoad={editor => {
    editor.once("change", function() {
        editor.session.getUndoManager().reset();
    });
}}

https://codesandbox.io/s/sharp-kalam-yen89