2015-11-19 7 views
15

更新@DominicトビアスにRedux;私の恥ずかしい間違いをスポッティングためcombineReducers

おかげで、@gabdallahを経由して構成さレデューサーを使用したときの状態の他の部分にアクセスします。

正解はもちろんです。

ですので、action.payloadをチェックしてみてください。

switch文とactionオブジェクトに関する他のコメントは、これまで修正した私の例で作成したエラーを参照しています。


私が次の2つのレデューサーを組み合わせたとします。

import { combineReducers } from 'redux' 
import { routerStateReducer } from 'redux-router' 
import entries from './entries' 

export default combineReducers({ 
    router: routerStateReducer, 
    entries 
}) 

私は、この場合には、グローバルな状態の別の部分に基づいてエントリの状態を変異したいと思います。たとえば、ページングを実装するためにredux-routerが提供するルータの状態。

どうすればこのようなことができますか?

いくつかのアプローチが考えられます。

  • は、ルータの状態をチェックして、順番にエントリの状態を変異ページ、リミット値を持つアクションの作成者を呼び出すためにcomponentWillMountのライフサイクルメソッドを使用し、Entriesルートコンポーネントにルータの状態を接続します。これはうまくいくでしょう。私はいくつかの移行ミドルウェアを使用して、そのコンポーネントをマウントする前に静的なfetchDataメソッドを呼び出しているので、データが取得され、その後ページ作成アクション作成者が呼び出されます。望ましい行動ではない。
  • 他のルータのアクション(ルータ専用のreduxモジュール)を聞いたり、エントリストアのアクションクリエータを呼び出したりしますが、これはredux-routerやルータへのアクセス方法がわかりませんグローバルストアの一部。
  • これはまったく行いません。 static fetchDataメソッドのルータの状態を問い合わせるだけです。

その他の有用な情報です。

問題の実装は、ユニバーサルアプリケーションが重く

  • Reduxの3.0.3
  • が反応0.14.2を反応させる反応-Reduxのユニバーサル・ホット例

    関連DEPSに触発されました - ルータ1.0.0-rc3

  • redux-router 1.0.0-beta3

どうすればこのような動作が可能ですか?私はこれについて正しい方法を考えていますか?戻る昔の

+1

アクションを参照してくださいには、型のオブジェクトおよびオプションのペイロードです。 @Dominic Tobiasで述べたように、アクションのtypeプロパティを切り替えて、ペイロードとして経路をレデューサーに送信する必要があります。 –

答えて

8

物事は人々が歴史オブジェクトのpopstateイベントに耳を傾けるだろう開発者のために簡単だ前に;)

必要な情報がアクションにあるように見えますか?

history.listen((error, nextRouterState) => { 
... 
store.dispatch(routerDidChange(nextRouterState)); 

とアクション:

export function routerDidChange(state) { 
    return { 
    type: ROUTER_DID_CHANGE, 
    payload: state 
    }; 
} 

のでaction.payloadをチェックしてみてください。あなたのswitch文はaction代わりのaction.typeを使用していることはそうそこに行く怪しい何かがありますしかし

..あなたはaction = {}を行う必要はありませんどちらか - http://redux.js.org/docs/basics/Reducers.html

+2

これはもちろん正しいです! –

関連する問題