仅在reducer状态下合并一个嵌套属性

时间:2016-12-29 14:29:04

标签: reactjs redux immutable.js

我有以下状态:

 new Map({
    data: new Map({
        all: null,
        recent: null
    }),
    filters: new Map({
        pagination: new Map({
            currentPage: 1
        }),
        sortBy: new Map({
            key: 'id',
            order: 'desc'
        })
    }),
    various: new Map()
}

我想仅更改currentPage属性,只留下sortBy,如下所示:

case PAGINATE:
    return state.merge({
        filters: new Map({
            pagination: new Map({
                currentPage: action.response
            })
        })
    })

但相反,sortBy已从filters中删除,我必须执行以下操作才能使其正常工作:

case PAGINATE:
    return state.merge({
        filters: new Map({
            pagination: new Map({
                currentPage: action.response
            }),
            sortBy: new Map({
                key: state.getIn(['filters', 'sortBy', 'key']),
                order: state.getIn(['filters', 'sortBy', 'order'])
            })
        })
    })

有更好的方法吗?

2 个答案:

答案 0 :(得分:0)

你可以喜欢这个

return state.merge({
    filters: state.get('filters').merge({
         pagination: new Map({
             currentPage: action.response
         })
    })
})

here

了解详情

答案 1 :(得分:0)

在您的情况下,您可以使用mergeIn,这是updateInmerge的组合,返回一个新的地图,但是在到达的地点执行合并的keyPath。

这样您的代码将如下所示:

case PAGINATE:
  return state.mergeIn(['filters', 'pagination'], {
    currentPage: action.response
  })

here了解mergeIn的更多信息。