我正在處理React/Redux應用程序,並且大部分情況下,一切都一直順利進行。使用Object.assign正確地返回嵌套狀態
從本質上講,它是具有內置的。
我無法在我的減速器中正確返回全部現有的狀態下,當用戶添加一個類別裏面待完成項目分類待辦事項應用程序。
了Redux狀態之前,我派遣行動方法add_item看起來是這樣的:
{
items: {
"HOME": [["Do laundry", "High Priority"],["Feed kids", "Low priority"] ],
"WORK": [["Get promotion", "High priority"],["Finish project", "Medium priority"] ],
"BOTH": [["Eat better", "Medium priority"],["Go for a run", "High priority"] ],
},
settings: {
Test: "test"
}
}
用戶導航到一個類別(預製作,還沒有實現創建它們還),可以創建一個新的todo-具有名稱和優先級的項目。這將調度一個返回數組的類型,如[category,name,priority]。
目前在我的減速器中,我已經在它成功添加項目的地方,但它正在清空/覆蓋所有現有的類別。
我的減速器是這樣的:
case types.ADD_ITEM:
let cat = action.payload[0];
let name = action.payload[1];
let priority = action.payload[2];
return Object.assign({}, state, { items: { [cat]: [...state.items[cat], [name, priority]]}});
我試圖創建一個新的對象首先與所有的合併項目,像這樣:
let combinedItems = Object.assign({}, state.items, { [cat]: [...state.items[cat], action.payload] });
如果我CONSOLE.LOG上述combinedItems,我得到我想要項目的確切對象。但是,我正在努力讓減速器返回的最終對象反映這一點。
當我嘗試像下面這樣的東西時,我得到一個包含combinedItems的對象作爲項目中的單獨鍵。
return Object.assign({}, state, { items: { combinedItems, [cat]: [...state.items[cat], [name, priority]]}});
任何人都可以幫助我得到我的最終REDX狀態來包含所有現有的類別/項目+用戶添加一個?我真的很感謝幫助。
你說你的初始狀態有鑰匙'todos'和'settings'但後來使用了'items'和'settings'走了......實際發生了什麼? – azium
'Object.assign'不會做很深的擴展。 – Bergi
@azium:道歉。在我發佈這個消息之前,我已經改變了一些名字,這是前一個版本的遺留物。現在應該是正確的。 – intoxxx