Redux reducer 中尚未更新的控制台输出状态

Console outputting state which is not yet updated in Redux reducer

首先,我不知道这个问题是否与 Chrome 控制台、Redux 或 JavaScript 对象有关。

我的 React + Redux 应用程序中有以下功能:

function InputReducer(state = [{ }], action) {
    console.log('input-reducer.js', 'state', state[0], JSON.stringify(state[0]));
    switch (action.type) {
        case 'STORE_INPUT_VALUE':
            let newState = {};
            newState = state[0];
            _.set(newState, action.storePointer, action.value);
            console.log('input-reducer.js', 'newState', newState, JSON.stringify(newState)); 
            return [newState];
        break;
        default:
            return state;
    }
}

我知道状态不应该被替换,而应该被更新。现在不要管它,这是在过程中。

这行得通,但我不明白的是,当我看到日志时,在更新状态时,第一个日志 returns 与 newState 完全相同的对象。这应该是不可能的,因为据我所知,更新状态的函数不应该在日志记录发生的时候执行。

更奇怪的是,当我将对象字符串化时,它 return 是正确的预期值。

如果我将函数修改为return一些无意义的状态,像这样:

function InputReducer(state = [{ a: 0 }], action) {
    console.log('input-reducer.js', 'state', state[0], JSON.stringify(state[0]));
    switch (action.type) {
        case 'STORE_INPUT_VALUE':
            let k = state[0].a + 1
            let newState = {a: k};
            console.log('input-reducer.js', 'newState', newState, JSON.stringify(newState)); 
            return [newState];
        break;
        default:
            return state;
    }
}

...日志正确显示了对象...或者至少它们看起来像我期望的那样。

那么这种行为与什么有关,我在这里遗漏了什么?

newState = state[0]; 为您提供对数组中第一个元素的引用。

_.set(newState, action.storePointer, action.value); 你的newState被修改了,所以直接修改了state[0]