【问题标题】:Ace Editor clearing on react renderAce Editor 清除反应渲染
【发布时间】:2017-03-23 17:28:45
【问题描述】:

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

<div>
    <div>
        <div
            <AceEditor/>
        </div>
    </div>
    <div>
        <p/>
        <hr/>
        {items}
    </div>
</div>

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

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

【问题讨论】:

    标签: reactjs jsx ace-editor


    【解决方案1】:

    对状态的更改将导致渲染重新显示 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')
    );
    

    【讨论】:

    • 在我发表此评论时(5.9.0),我认为这至少不适用于最新版本的 react-ace。我认为当您更改 ace 编辑器值时,代码中不会处理“defaultValue”。我直接使用 value 属性,它对我来说很好。
    • 你@Ryan.C 刚刚救了我的命。我的英雄。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-16
    • 2019-10-30
    • 2023-03-10
    • 1970-01-01
    相关资源
    最近更新 更多