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]
。
首先,我不知道这个问题是否与 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]
。