React / Redux嵌套状态问题

时间:2017-09-23 20:52:17

标签: reactjs redux react-redux immutable.js

我是React / Redux的新手,我试图将我的一个对象作为Map / Hash存储在Redux状态,其中键是来自db的对象的主键,值是对象本身。 / p>

然而,每当我更新时,状态似乎都会被覆盖,而我添加的新值是唯一剩下的值。这是我的代码:

import { RECEIVE_CURRENT_SCAN_RESULT } from '../constants';

const initialState = {
    currentScanResult: {info:{}, results:[]},
};

export default createReducer(initialState, {
    [RECEIVE_CURRENT_SCAN_RESULT]: (state, payload) =>
        Object.assign({}, state, {
            currentScanResult: payload
        })

});


export function createReducer(initialState, reducerMap) {
    return (state = initialState, action) => {
        const reducer = reducerMap[action.type];

        return reducer
            ? reducer(state, action.payload)
            : state;
    }
}

我想传递我的对象:

{id: 1, thing: "blue"} 

并使用它更新状态。如果我传入:

 {id: 2, thing: "red"} 

我希望我的redux状态能够反映出来:

currentScanResult: {1: {id: 1, thing: "blue"}, 2: {id: 2, thing: "red"}}

我有什么简单的方法可以做到这一点吗?如果我要更新嵌套值,redux会重新渲染吗?例如,如果我传入:

{id: 2, thing: "purple"}

 => currentScanResult: {1: {id: 1, thing: "blue"}, 2: {id: 2, thing: "purple"}}

我希望看到这样的行为。我已经研究过Immutable JS我只是想知道如果没有它可以让这个简单的用例工作吗?

1 个答案:

答案 0 :(得分:2)

当你这样做时

Object.assign({}, state, {
    currentScanResult: payload
})

你压倒state.currentScanResult。如果要更新它,则需要执行类似

的操作
Object.assign({}, state, {
    currentScanResult: Object.assign({}, state.currentScanResult, payload)
})