2017-07-02 36 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' } 
    } 
}; 

...然後sorterA不會在存儲中創建可言,因爲它不是在sorting初始值包括在內。

那麼如何才能爲多減分器的一部分指定初始狀態?

回答

1

閱讀文檔幫助我找出解決方案。

所有的reducer在初始化時都會被undefined傳遞,因此應該這樣寫,以便在未定義的時候返回一些值。

- Redux documentation

因此,所有我需要做的就是確保我的減速功能,當它接收undefined返回預期的初始狀態!

這就是我想出了:

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

當然,tableSorterReducer定義它自己的initialState,但我重寫這裏。

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

你所暗示的樣子標準,證據充分的方法商店。 這個答案沒有解決這個問題,它只是爲嵌套slice的_part_提供一個初始值。 – burtyish

+0

通過爲每個縮減器提供默認狀態,您應該能夠爲所需的任何嵌套切片的每個部分提供初始狀態。您可以格式化提供給您的喜好的默認對象。 –

+0

是的,這就是我的解決方案:https://stackoverflow.com/a/44878777/507240謝謝! – burtyish

相關問題