还原剂中还原剂的先前状态

时间:2017-01-28 12:02:32

标签: reactjs redux

这是我的减速机的样子:

export default function catalogReducer(state = initialState.catalogItems, action){
  switch (action.type) {
    case types.LOAD_CATALOG_SUCCESS:
      return {
         count:action.count,
        products :[...state['products'],
        action.catalogItems  ?
        [...action.catalogItems['products']]
          :
          []
      ]
    default:
      return state;
  }
}

我想做什么:

  1. 这是用于加载目录项的缩减器

  2. 项目来自分页api。

  3. 我需要将api的结果添加到现有的列表中 产品
  4. 问题:

    我希望状态参数应该将先前的状态关联但不是,它始终从initialState获取值,这是我在应用程序启动时初始化状态。

    为什么?它的方法是什么?

    基本上我需要通过pagination api返回完整的项目集,而不仅仅是products数组中给定页面的产品。 我最后得到的只是上一次api调用的产品数组,因为state.products总是初始化为空数组

    另外,一般来说,我对在react和redux中处理分页api感到非常困惑,而且我找不到一个直截了当的例子。

    方向将不胜感激。

    这就是initialState.js文件的样子:

    import cookie from 'react-cookie';
    
    export default {
     categories:[],
      sessionId: cookie.load('sessionId') || '',
      youMayLikeItems : [],
      catalogItems: {'products': []}
    }
    

    //此文件用于集中存储中状态的初始化

1 个答案:

答案 0 :(得分:4)

基本上,你需要记住,你不应该改变状态。

export default function catalogReducer(state = initialState, action) {
  switch (action.type) {
    case types.LOAD_CATALOG_SUCCESS:
      return {
        ...state,
        catalogItems: {
          count: action.count,                          
          products: [
            ...state.catalogItems['products'],
            action.catalogItems  ?
              action.catalogItems['products']
              :
              {}
          ]
        }
  default:
    return state;
  }
}

您可以找到更多有用的示例here

最好在没有深层对象的情况下制作简单的状态(docs)并使用Immutable.js