2017-03-23 12 views
1

I持って反応し、下記の構造(私はこの記事のためにそれを単純化):エースエディタがレンダリング反応

<div> 
    <div> 
     <div 
      <AceEditor/> 
     </div> 
    </div> 
    <div> 
     <p/> 
     <hr/> 
     {items} 
    </div> 
</div> 
AceEditorが react-ace NPMパッケージからインポートされ、 {items}から作成した、様々なサイズの配列です

配列はthis.stateです。 すべてのことは、1つのことを除いて動作します。の配列が変更されているため、{items}の変更によってこの構造がレンダリングされるたびに、AceEditorのテキストがリセットされます。 onChangeイベントは発生せず、問題の原因をその根底まで追跡することはできません。

誰でも問題の原因とその解決方法を知っていますか?

答えて

3

状態を変更すると、レンダリングによってDOMが再表示され、状態が更新されるたびに変更が消去されます。

ほとんどの場合、AceEditorの状態を状態に保存する必要があります。そのため、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" 
    defaultValue={this.state.newValue} 
    editorProps={{$blockScrolling: true}} 
    />, 
    document.getElementById('example') 
); 
+1

これはうまくいきました。ありがとうございました! – Chester

+0

私はこのコメント(5.9.0)を作成した時点で、少なくともリアクションエースの最新バージョンではこれが動作しないと思います。私は 'defaultValue'は、エースエディタの値を変更するときにコードで処理されないと思う。私は値の属性を直接使用し、それは私のために正常に動作します。 –

関連する問題