2016-05-23 4 views
0

私は大きいjsonデータセット私はそれをの製品の真実と呼んでいます。いくつかのフィルタリングを使用して、私はこのデータセットをフィルタリングし、フィルタに合致する製品のサブセットを返す必要があります。私はさまざまなフィルタを使用することができ、それは真理の源からサブセットを返すべきです。フィルタは、(1)価格が$ 10を超えるタイトル(2)の商品にキーワード「javascript」を有する商品であってもよい。私はこの真実の源に新しい製品を加えることもできます。フィルタを再度適用すると、新しく追加された製品が結果のサブセットに返される可能性があります。一部の状態を返す

私が見た還元剤の例はすべて、前の状態から状態を戻しています。だから私の場合は、私はその減速機の原則に従っている場合、私は製品の真実のソースにフィルタを適用し、新しい状態を得ることができます。今度は別のフィルタを適用すれば、私はそれを真実の源ではなく新しい状態に適用することができます。したがって、フィルターはすでにフィルターされた製品状態で行われます。

フィルタを真実のオリジナル/マスター製品のソースに適用します。私はフィルタがすでにフィルタリングされた状態で適用されることを望んでいません。

誰かが助けることができますか?

答えて

1

大規模なJSONデータセット全体を保持するfullDataと呼ばれる状態を作成し、次に、fullDataのサブセットをfilteredData(個別の状態)としてディスパッチするアクションを呼び出すことができますか? filteredDataが存在しない場合はfullDataをレンダリングする関数を作成できます。それ以外の場合はfilteredDataをレンダリングします。これは最も洗練されたソリューションではないかもしれませんが、うまくいくと思います。

FILTER_RESULTSと呼ばれる「タイプ」を作成します。次に、あなたの減速状態のfilteredDataピースにaction.payloadを返すswitch文を持っているでしょう

export function filterResults(fullData) { 
// javascript here to filter results 
return { 
    type: FILTER_RESULTS, 
    payload: <variable containing filtered results> 
}; 
} 

:次に、あなたのアクションクリエータファイルでアクションを作成します。

あなたのアクションはフィルタリングを行い、フィルタリングされた結果をレデューサーに渡し、mapStateToPropsはコンポーネントがあなたの状態にアクセスできるようにします。ここをクリックしてください。https://github.com/joshuaslate/mern-starter

+0

このフィルタリングはどこで実行できますか?減速機または** MapStateToProps **機能では? –

+0

明確にするために私の答えを改訂しましたが、追加したリンクをご覧ください。アクションクリエイター、レデューサー、コネクションがどのように連携して動作するかの基本的な例を紹介します。 –

+0

解決策は、マスタ状態とサブ状態という2つの異なる状態を持つことを提案します。 Abhinavのソリューションは、1つの州だけを使用し、新しい州にはreduxストアを使用しないことです。これはUIの関心事であり、UIで管理します。 –

1

"transient state"であるため、component自体のクライアントsidemでデータをフィルタリングするロジックを実装する必要があります。 - 私たちは、このようなフィルタを選択フィルタ部を、レンダリング

  1. Filterコンポーネント:

    言ってやるが、あなたは、次のコンポーネントがデータを持っており、レンダリングContainerコンポーネントを持っている場合。

  2. WorkspaceViewコンポーネント - 実際のビューをデータで表示します。ここでデータが表示されます。

次に、あなたのContainerコンポーネントは、私はReduxがある場合には使用すべきであるとは思わないFilterコンポーネントによって送られfiltersに基づいてデータ自体をフィルタリングし、WorkspaceView

にデータを渡しますそのような「一時的な」状態であり、バックエンドなどからデータが提供される場合にのみ使用されるべきです。

関連する問題