王牌编辑器清除反应渲染

che*_*sta 3 jsx ace-editor reactjs

我有以下反应结构(我为这篇文章简化了它):

<div>
    <div>
        <div
            <AceEditor/>
        </div>
    </div>
    <div>
        <p/>
        <hr/>
        {items}
    </div>
</div>
Run Code Online (Sandbox Code Playgroud)

AceEditor 是从react-acenpm 包中导入的,{items}是一个大小不一的数组,从this.state. 一切正常,除了一件事:每次由于 中的更改{items}(由于 中的数组更改this.state)而重新渲染此结构时,AceEditor 中的文本都会重置。没有触发 onChange 事件,我似乎无法追踪问题的根源。

有谁知道导致问题的原因以及如何解决这个问题?

Chr*_*kes 6

对状态的更改将导致渲染重新显示 DOM,从而在状态更新时清除您的更改。

您很可能需要将 AceEditor 的状态存储在 state 中,以便在 DOM 重新渲染时重新显示。

function onChange(newValue) {
  // store this value in state!!
  this.setState({ newValue: newValue});
}

// Render editor
render(
  <AceEditor
    mode="java"
    theme="github"
    onChange={onChange}
    name="UNIQUE_ID_OF_DIV"
    value={this.state.newValue}
    editorProps={{$blockScrolling: true}}
  />,
  document.getElementById('example')
);
Run Code Online (Sandbox Code Playgroud)

  • 我认为这至少不适用于我发表此评论时的最新版本 react-ace (5.9.0)。我认为当您更改 ace 编辑器值时,代码中不会处理“defaultValue”。我直接使用 value 属性,它对我来说很好用。 (2认同)