簡體   English   中英

反應還原劑不會變質

[英]react redux reducer not changin

我遇到了這個瘋狂的問題,我認為有關純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
}
  1. 返回“1”,這是正確的
  2. 返回正確的[“0”,“0”,“1”,“0”]
  3. 返回

    analogIn:“0”,輸出:[“0”,“0”,“0”,“0”]

所以國家沒有改變......

當我嘗試更改模擬時,它可以工作

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

任何想法為什么會這樣? 它與redux有關嗎?

好的,找到了解決方案。

因為它似乎使用這個:

newstate.outputs = outputs

或這個:

newstate.outputs[num] = "1"

如果要將一個數組的內容復制到作為數組的對象的值,則不起作用

解決方案是克隆數組

newstate.outputs = outputs.slice(0)

我不確定這是因為es6還是純粹的JS而發生的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM