2016-07-20 15 views
2

私は、React + Reduxを使用して、APIと話すWebアプリケーションを構築します。具体例は、https://github.com/reactjs/redux/tree/master/examples/real-worldに示されています。反応+還元における還元剤の良い戦略は?

My APIは、アーティスト、アルバム、トラックのリストを返し、それらのリスト、または個々のアーティスト、アルバム、またはトラックを照会することができます。 (/ album /:id、/ artist /:id、/ tracks /:idを追加して、/ albums、/ artist、/ tracksと考えてください)

APIミドルウェアを実装し、上記の例のようにpaginateレデューサーを使用して、アルバム、アーティスト、曲検索用のページ番号付きキーストアを取得しました。

ここでは、単一のオブジェクトを取得して表示するための特異な呼び出しを実装したいと考えています。しかし私は自分のレデューサーを扱う正しい方法についてはわかりません。私はちょうどcombineReducers余分なレデューサーとartistalbumtrackこれらの項目を管理し、保存する必要がありますか?

私がレデューサー管理に関連するもう一つの質問は、私の現在のセットアップでは、3個のpaginateレデューサーを格納しており、それぞれ30個のアイテムが入っています。つまり、店内には100アイテム近くありますが、そのうち30アイテムは同時に表示されますが、効率的ではないようです。私はそれを正しくしていますか?

は、私は後ろの非常に大きなAPIと現実世界のオープンソースの例を探しましたが、もう少し上の現実世界での例よりも精緻例に遭遇しませんでした:/

ありがとう!

答えて

-1

明らかに、1つのルールはすべてReactには当てはまりません。

しかし、ほとんどのボイラープレートやGitHubのWebアプリケーションに反応していたのは、通常、各コンテナに対してレデューサーが作成されていることです。

あなたのアーティスト、アルバム、トラックのレデューサーを作成するのが良い方法です。それでは、combineReducerを使用して1つのrootReducerに組み合わせることができます。ここに例があります。

import { combineReducers } from 'redux'; 
import artists from './artistsReducer'; 
import albums from './albumsReducer'; 
import tracks from './tracksReducer'; 

const rootReducer = combineReducers({ 
    artists, 
    albums, 
    tracks 
}); 

export default rootReducer; 

この情報は、自己の経験と反応し使用してレポ見てからですアゲイン - Reduxのを私が間違っている場合は、私を修正してください。

私はかなりドメインオブジェクトの種類によってセグメント化状態を保ち始めましたよろしく、

+0

私はあまりにも、確認のおかげでそれを考えていた。次に、アーティスト、アルバム、トラックのコレクション(基本的に '/ artist'、'/albums'、 '/ tracks'のビュー)のための縮小を行います。 "単数形"のビュー( '/ artist'、'/album'、 '/ track')はどうやって扱いますか?それは私が決してレポで見ることのできないものです。私はそれらを格納するために3つの他のレデューサーを組み合わせるか、複数のレデューサーに値を格納するだけでよいですか? '[アーティスト]'?ありがとう – Phyks

+0

個人的に、私は各コ​​ンポーネント/コンテナのために1つの還元剤を使います。 /SRC /コンポーネント - プレゼンテーションコンポーネント(論理又はデータ操作なし) Artists.jsx Artist.jsx AnotherArtistRelatedComponent.jsx /コンテナ - コンテナコンポーネント Artist.js /アクション - アクション ArtistActions.js /レジューサー - レデューサー ArtistsReducers.js これはダン・アブラモフが何度も提案したフラクタル構造です。 よろしくお願いします。 –

+0

うーん...ごめんなさいが私には分かりません。申し訳ありません。 1)「Artists.jsx」と「Artist.jsx」ではなく、コンテナ「Artists.jsx」が1つしかないのはなぜですか? 2)私はあなたの行動と減量を得る。しかし、あなたの設定では、 'Artists.jsx'(コンテナ)は後で呼び出されるコンポーネントに応じて' fetchArtists'や 'fetchArtist'のような別のアクションを呼び出すでしょうか?次に、データを店舗にどのように格納しますか?複数のアイテム( 'アーティスト'ビュー)または単一のアイテム( 'アーティスト'ビュー)の配列を含む単一の 'アーティスト'ストア?ありがとう! – Phyks

-1

- アーティストのアルバムやトラックのように(だけでなく、いくつかのユーザインタフェース状態のような「オーバーレイ」、「エラーメッセージ」とかのようにそれ)。それから私は、現在の状態を取って、それをReactコンポーネントが使用できるものに処理する、いくつかの再選択クラスを持っています。

これは、データ変換(独立してテスト可能)とは別に、簡単なデータストア(あなたの好きなユニットテストフレームワークでテスト可能)を提供します。

再選択についての良いことは、素敵なデータ変換パイプラインを提供し、結果をキャッシュすることです。データ変換をいつも再計算する必要はありません。つまり、Reactコンポーネントは、再レンダリングする必要がないときには、より良くなる可能性があります。

ああ、サーバーからのキャッシュされたデータをたくさん格納しているものの効率の面では、私の戦略は積極的にキャッシュすることなので、キャッシュからパージする必要はありません。しかし、私はreduxモデルを監視し、状態変更(プリロードデータなど)に基づいてイベントをトリガーする「コントローラ」と呼ばれる別個のオブジェクトを持っています。これはパフォーマンス上の問題になった場合、キャッシュ無効化コードを置く場所です。または、キャッシュ無効化を実行するリデューサを取得することもできます。

関連する問題