我是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我只是想知道如果没有它可以让这个简单的用例工作吗?
答案 0 :(得分:2)
当你这样做时
Object.assign({}, state, {
currentScanResult: payload
})
你压倒state.currentScanResult
。如果要更新它,则需要执行类似
Object.assign({}, state, {
currentScanResult: Object.assign({}, state.currentScanResult, payload)
})