2017-07-02 16 views
0

私のプロジェクトでは、同じレデューサーの多くのインスタンスを維持するためにmultireducerを使用しています。 マイストアはこのようなものを使用して作成されます。単一のマルチレギュレータサブスライスの初期状態を提供する方法

const initialState = {}; 

export default createStoreWithMiddleware(combineReducers({ 
    foo: fooReducer, 
    sorting: multireducer({ 
     sorterA: tableSorterReducer, 
     sorterB: tableSorterReducer, 
    }), 
}), initialState); 

は今、私はsorterBのための初期状態を追加する必要があります。 私は...

const initialState = { 
    sorting: { 
     sorterB: { key: 'foo', order: 'asc' } 
    } 
}; 

...次を追加した場合、それがsortingの初期値には含まれていないので、その後sorterAは、全くストアに作成されていません。

どのようにして、マルチリアクターの一部の初期状態を指定できますか?

答えて

1

ドキュメントを読み進めて解決策を見つけ出すのに役立ちました。

すべてのレデューサーは、初期化時に未定義に渡されるため、未定義が指定されている場合は値を返すように記述する必要があります。

- Redux documentation

だから私がする必要があるすべては、それがundefinedを受信したときに、私の減速機能が期待される初期状態を返すことを確認してくださいです! tableSorterReducerが、それは自分のinitialStateだ定義し、もちろん

export default createStoreWithMiddleware(combineReducers({ 
    foo: fooReducer, 
    sorting: multireducer({ 
     sorterA: tableSorterReducer, 
     sorterB: (state = { key: 'foo', order: 'asc' }, action) => 
      tableSorterReducer(state, action), 
    }), 
})); 

が、私はここにいることをオーバーライドしています:

は、ここで私が思いついたものです。

0

ここに私はいつも一緒に行く方法です。

構成ストア:

export default function configureStore(preloadedState){ 
    let defaultStates = { 
     user: { 
      isLoggedIn: preloadedState.isLoggedIn, 
     } 
     // preloadedState contains values from server, in order to hydrate store 
    }; 

    return createStore(
     rootReducer, 
     defaultStates, 
     applyMiddleware(
      thunkMiddleware, 
      loggerMiddleware 
     ) 
    ) 
} 

と減速例:の*スライス*のための初期状態を供給する

const INITIAL_STATE = { 
    isLoggedIn: false 
}; 

export default function user(state = INITIAL_STATE, action){ 
    switch(action.type){ 
     case USER_LOGGED_IN: 
      return Object.assign({}, state, { 
       isLoggedIn: true 
      }); 
     case USER_LOGGED_OUT: 
      return Object.assign({}, state, { 
       isLoggedIn: false 
      }); 
     default: 
      return state; 
    } 
} 
+0

何が標準のようなルックスを示唆している、十分に文書化する方法格納。 この回答は、ネストされたスライスの_part_にのみ初期値を指定するという質問には対応していません。 – burtyish

+0

各レデューサーにデフォルトの状態を指定することで、ネストしたスライスのすべての部分に対して初期状態を提供できるはずです。あなたは好みに合わせて提供されるデフォルトのオブジェクトをフォーマットすることができます。 –

+0

ええ、それが私をこの解決策に導いてくれました:https://stackoverflow.com/a/44878777/507240ありがとう! – burtyish

関連する問題