2016-08-05 7 views
1

私は別のコンポーネントを作成してレンダリングしました。ボタンをクリックすると、いくつかの計算を行い、その他のコンポーネントのいくつかの小道具を変更してそのビューを更新したいと思います。どうすればいい?Reactでは、どのようにして、親が別のコンポーネントのプロットまたは状態値をプログラムで変更することができますか?

小道具の代わりに州の値である必要がある場合は、問題ありません。他のコンポーネントからsetState()を呼び出すことはできますか?

class MainComponent extends React.Component { 

    other: null, 

    constructor(props, children) 
    { 
     //Create the component 
     this.other = ReactDOM.render(otherReactElement, document.body); 
    } 

... 

    //An on Click handler 
    handle: function(evt) 
    { 
     //This is what I want to do 
     other.setProps({ aPropToChange: "new value" }); 
    } 
}; 

"setProps"は推奨されていません。そんなことを可能にするために他に何ができますか?

+1

最小コードサンプルを共有できますか? –

+0

@DavinTryonいくつかのコードを追加しました。 –

+1

'handle'メソッドのコンテキストは何ですか?それはReactコンポーネントにありますか?より詳細な「反応」コードを追加できますか? – Pcriulan

答えて

1

otherに新しい小道具を渡したい場合は、hereと表示されているように、新しい小道具でReactDOM.render()を再度呼び出す必要があります。

私はjsfiddleを作成しました。propsstateを正しく更新する方法を知ることができます。

+0

ありがとうございます。 'changeProps' - 私はちょうど1つの小道具を変更することはできませんでした、私はそれらのすべてをオーバーライドする必要があります、正しい?それは完全に再レンダリングされているので? –

+0

うん、それは小道具を上書きしますが、「状態」は保存されます。このようなものを使って古い小道具を渡すことができますhttps://jsfiddle.net/69z2wepo/51796/ – QoP

1

Reactでは、親コンポーネントはrefを使用して子コンポーネントの状態を変更できます。リファレンスを使用すると、子コンポーネントへの参照が取得され、その参照を使用して子コンポーネント内の関数を呼び出すことができ、その関数はその中にsetState()呼び出しを持つことができます。

反応参照の詳細はこちらhttps://facebook.github.io/react/docs/more-about-refs.html#the-ref-callback-attribute

+1

'ReactDOM.render'から返されたコンポーネントを既に持っていると、なぜrefsが必要でしょうか? –

+0

@DonRhummyこの場合、ReactDOM.renderから返されたコンポーネントがありますが、一般的なユースケースでは、子要素はのように親要素内にレンダリングされます。この場合、<子参照= "子参照" />のような子への参照がある場合は、this.refs.childref.childFunction()を使用して親の子関数を呼び出すことができます。 – Samu

関連する問題