2016-11-11 4 views
3

私はMeteor/Reactアプリケーションを持っていて、Meteor createContainerコンテナメソッドを使ってMongoからデータを収集し、結果を子コンポーネントに渡しています。 paramsのいずれかが変更された場合、Mongoクエリは再計算されます(ただし、パラメータはMongoクエリ自体に影響を与えません)。そして、小道具が子コンポーネントに送信され、不必要に再レンダリングされます。これは、createContainerが動作することになっているか、またはクエリが返すデータが変更されたときにだけ小道具を送信するだけですか? paramsMyComponentに受け継がれ、うリアクトされますので、その小道具が変更されたためparams変更は、MyComponentを再レンダリングするとき注入されたパラメータが変化したときにMeteor createContainerが再計算されますか?

export default MyComponentContainer = createContainer((params) => { 

    // Some Mongo queries... 
    var query results = MyColl.find({}).fetch(); 

    return { 
     query results 
    }; 

}, MyComponent); 

答えて

1

はい、それはなり再計算し、その包まれたコンポーネントが再レンダリングされます。

あなたresultsは大きな配列であり、あなたがresultsを再レンダリングしたくない場合は、私はあなたがresultsをレンダリングするためにMyComponent内の他の子コンポーネントを使用することをお勧め:

const ResultComponent = (props) => props.results.map(...); 

const MyComponent = (props) => ({ 
    <div> 
    <ResultComponent results={props.results} /> 
    </div> 
}); 

この方法ResultComponentのみ再レンダリングされますresultsが変更された場合

+0

これに追加するには、[MyComponent]が再作成されないように['shouldComponentUpdate'](https://facebook.github.io/react/docs/react-component.html#shouldcomponentupdate)を使用することもできますそれが必要でないなら、浪費する。 – Waiski

+0

一般にReactでは、5つの小道具のうち1つが変更されると、5つの小道具が使用されているこのコンポーネント内のすべての場所がその値を更新しますか? – JoeTidee

+0

コンポーネントに子コンポーネントがない場合は、その中のすべてが小道具の1つが変更されたときに再レンダリングされます。 – Khang

関連する問題