2016-11-17 13 views
0

の一部にコンポーネントを反応させますreact-redux。そして、私は例えばCREATE_ALERTまたはEDIT_ALERTとReduxの状態に更新のようなアラートのためのいくつかのアクションを起動すると、ALLコンポーネントがこの変更にのようなさまざまな部分で動作しますも、ものを対応させていただきますREACTことmapStateToPropsバインドは、私は次のようになりますReduxの店舗を持ってReduxの状態

(state) => {alerts: state.alerts} 
(state, ownProps) => {alert: _.filter(state, {id: ownProps.curId})} 

このような問題を抱えています sourcesまたは reports

私の質問:特定のコンポーネントをツリーの特定の部分に「バインドする」方法。そのため、各コンテナコンポーネントは、副都道府県の都道府県がに更新された場合にのみ更新され、その他の変更は無視されます。

期待される動作

派遣CREATE_ALERT - >ONLYアラートコンテナコンポーネントの再レンダリング - >アラートの減速 - > Reduxのストア更新。

答えて

2

reduxで状態を変更すると、状態全体がちょうど新しいオブジェクトになります。 あなたのコンポーネントはこの新しいオブジェクト(新しい参照)によって与えられ、再レンダリングされます。

この動作を修正するには、コンポーネントに異なる値(参照外)の小道具があるかどうかを比較するロジックを追加する必要があります。

最も簡単で速い方法はReact.PureComponentです。 shouldComponentUpdate関数をオーバーライドして、変更を自分で処理することもできます。しかし、PureComponentはプリミティブでのみ機能することに注意してください(これは浅い比較を行います)。

また、Immutable.jsを確認すると、小道具の参照を変更するインテリジェントな方法に役立ちます。

ユーザーコンポーネント:

const mapStateToProps = state =>({ 
    users: state.users 
    }); 

export default connect(mapStateToProps)(User) 

アラート

+0

ありがとう、私はそれをチェックアウトします。 Btwこれについてどう思いますか? https://www.npmjs.com/package/reselect これでいくつかの期限はありましたか? – Strangerliquid

+0

Reselectはレフィックスセレクターのための良いmomoizingライブラリです。そのモモイジングプロパティはあなたの問題を解決します。しかし、私は 'PureComponent'を最初に使うことを強くお勧めします(既にReactに入っています)。 – neciu

+0

私は最初に試してみよう/今晩はいくつかテストをします。 PureComponents、Selectors、ImmutableJS ここに結果を報告してください – Strangerliquid

0

あなたは、connectメソッドを使用している場合、そのコンポーネントにのみ選択Reduxの状態を通過し、これは他のコンポーネントのレンダリング

例を防ぐことができます成分:

const mapStateToProps = state =>({ 
    alerts: state.alerts 
    }); 

export default connect(mapStateToProps)(Alert) 
0

これをチェックする:Avoid Reconciliation

何が説明されているのですかNeciuと書かれています。

0

connectで作成されたコンテナコンポーネントは、常にそのストアに対するすべての更新の通知を受け取ります。

これらのアップデートを使用する責任は、受信側のconnectコンポーネントにあります。これに関連するデータを抽出するロジックが含まれている必要があります。

関連する問題