2015-11-15 8 views
5

私はimmutable.JSを使ってredux-immutablejs経由でストアを管理しています。私は今還元型ライブラリを使用したいと思いますが、私は減速機を組み合わせた問題があります。immutable.jsのようなものを使用してReduxで複数のcombineReducers関数を組み合わせるには

Redux-immutableは、それが渡されたすべてのレデューサーが不変オブジェクトを返すかどうかを調べるcombineReducers関数を提供します。

Redux自体は、そのようなチェックを実行しないcombineReducers関数を提供します。

Reduxフォームでは、レデューサーを含める必要がありますが、Redux不変のcombineReducersを使用すると失敗します。

私は基本的にそうように、これらの2つの関数の出力を結合さやろうとしているので、何:

import { combineReducers } from 'redux'; 
import { combineReducers as combineReducersUtils } from 'redux-utils'; 
import {reducer as formReducer} from 'redux-form'; 

const mainReducers = combineReducersUtils({ 
    devices, alarms 
}); 

const extraReducers = combineReducers({ 
    form: formReducer 
}); 

export default (mainReducers + extraReducers); 

最後の行は明らかに動作しませんが、私は後だものを基本的に示しています。

お読みいただきありがとうございます。

+1

申し訳ありませんがちょうどReduxの-utilsのから明らかcombineReducersことはReduxの、不変の周りの軽量ラッパーです。 –

答えて

5

多分このような何か?

function rootReducer(state, action) { 
    const newState = combineReducersUtils({devices, alarms})(state, action); 
    return combineReducers({form: formReducer})(newState, action); 
} 

combineReducersの戻り値は、単に減速であるので、それが動作するはずです:

(機能):レデューサーはオブジェクト内のすべての減速を呼び出し、そして同じで状態オブジェクトを構築減速形状。すべての派遣に新しい関数を作成しないように更新

https://github.com/rackt/redux/blob/master/docs/api/combineReducers.md


const mainReducers = combineReducersUtils({devices, alarms}); 
const formReducers = combineReducers({form: formReducer}); 

function rootReducer(state, action) { 
    return formReducers(mainReducers(state, action), action); 
} 
+3

将来これを読んでいる人のために、これは今ここでredux形式の一部として完全に文書化されていますhttp://erikras.github.io/redux-form/#/faq/immutable-js?_k=dqesvr –

+3

これは、あなたがアクションがディスパッチされるたびに関数を割り当てているので、かなり悪いパフォーマンスです。 –

+1

@DanAbramovには良い方法がありますか?私はいくつかの共有フィールド(ページ番号、ソートタイプ)を持っており、異なる還元剤でロジックを複製したくありません。 – user3409950

関連する問題