我遇到了这个疯狂的问题,我认为有关纯JS而不是redux的更多信息。
我的初始状态如下:
let data = {
outputs : ["0", "0", "0", "0"],
analogIn : "0"
}
这是我的reducer的一部分所以当我尝试更改输出数组的值(例如第3个值)时
let newstate = Object.assign({}, state);
switch (action.type) {
case 'CLICK_OUTPUT':
let outputs = newstate.outputs
let status = outputs[action.num]
let newStatus = (status == "0") ? "1" : "0"
outputs[action.num] = newStatus
newstate.outputs = outputs
console.log(newstate.outputs[action.num]) <-- 1.
console.log(newstate.outputs) <-- 2.
console.log(newstate) <-- 3.
return newstate
default:
return state || data.data
}
返回
analogIn:“0”, 输出:[“0”,“0”,“0”,“0”]
所以状态没有改变......
当我尝试更改模拟时,它可以正常工作
case 'CHANGE_IN':
newstate.analogIn = action.val
return newstate
为什么会发生这种情况? 它与redux有关吗?
答案 0 :(得分:0)
好的,找到了解决方案。
似乎正在使用它:
newstate.outputs = outputs
或者这个:
newstate.outputs[num] = "1"
如果要将一个数组的内容复制到一个数组对象的值,
不起作用
解决方案是克隆数组
newstate.outputs = outputs.slice(0)
我不确定这是因为es6还是纯粹的JS。