【问题标题】:react redux reducer not changin反应redux减速器没有改变
【发布时间】:2016-06-08 07:14:44
【问题描述】:

我遇到了这个疯狂的问题,我认为这更多地与纯 JS 而不是 redux 相关。

我的初始状态是这样的:

let data = {
    outputs : ["0", "0", "0", "0"],
    analogIn : "0"
}

这是我的减速器的一部分,所以当我尝试更改输出数组的值时(例如第三个值)

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
}
  1. 返回正确的“1”
  2. 返回正确的 ["0", "0", "1", "0"]
  3. 返回

    analogIn : "0", 输出:[“0”,“0”,“0”,“0”]

所以状态没有改变...

当我尝试更改模拟时,它可以工作

case 'CHANGE_IN':
    newstate.analogIn = action.val
    return newstate

任何想法为什么会发生这种情况? 和redux有关系吗?

【问题讨论】:

标签: javascript arrays reactjs redux


【解决方案1】:

好的,找到解决办法了。

似乎使用这个:

newstate.outputs = outputs

或者这个:

newstate.outputs[num] = "1"

如果您想将一个数组的内容复制到一个数组对象的值,则不起作用

解决办法是克隆数组

newstate.outputs = outputs.slice(0)

我不确定这是因为 es6 还是纯 JS。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-11-26
    • 2017-03-12
    • 1970-01-01
    • 1970-01-01
    • 2017-06-14
    • 2020-11-27
    • 1970-01-01
    • 2022-01-04
    相关资源
    最近更新 更多