首先,我的英語不好。我很抱歉。
我正在為一個游戲創建一個每日和每周任務檢查應用程式,在這個應用程式中,用戶可以在注冊用戶的角色后檢查每個角色的每日任務。然而,如果我檢查一個角色的每日任務,所有其他角色都會被檢查。這種現象在以下情況下繼續存在:
我嘗試了一個多星期。我發現這出現在redux(react-redux)的reducer中。然而,以我的技術根本無法理解它,所以我發了一個問題。
首先,圖片是。 my imgur
而且我認為你不會通過圖片來理解它,所以我準備了一個 YouTube鏈接
這就是 兩個字符的復選框排列在redox devtool中的實際變化。 很抱歉,我還沒有插入圖片。
span class="hljs-keyword">const initialState = {
LoaData: {},
weekADay: ''/span>,
};
const reducer = (state = initialState,action) => {
switch(action.type) {
case 'CHECKBOX_REDUX'/span>:
return changeCheckbox(state, action)。
default:
return state。
};
上面的代碼是react-redux的reducer。 而改變Checkbox(state,action)的函式如下。
const changeCheckbox = (state, action)=> {
let {
contentType, //在這個問題中,我只使用'day'。
firstIndex, //這個用于劃分內容。
id, //這是字符的唯一id(=new Date)和檢查字符。
值 // I send checkbox array ex) [false, false, false].
} = action.payload。
let newState = Object.assign({}, state)。
let character = newState.LoaData.characters[id] 。
let filteredContents = character.contents[contentType] 。
if(contentType === 'daily') { //為測驗,僅顯示'daily'。
let weekADay = newState.weekADay; // Mon or Tue or Wed ...
for(let i = 0; i < filteredContents[weekADay] [firstIndex]. value.length; i ) {
filteredContents[weekADay][firstIndex].value[i] = value[i]。
}
}
return newState。
}
而底部是 console.log(action.payload)
{
"contentType"/span>: "daily",
"firstIndex": 0,
"id": "1632050917445",
"value": [ true, false, false ] 。
}
通過多次測驗,發現在for陳述句中出現了問題。我也確認了所需角色的昵稱會正常變化。然而,在for陳述句中,證實了'不同字符的值'的同一索引的布林值也在每次迭代中發生變化。
請幫助我
redux: 4.1.1
react-redux: 7.2.4
react: 16.13.1
expo: 42.0.1
uj5u.com熱心網友回復:
這取決于你如何在商店的其他部分創建和更新你的角色,但你可能在彼此之間共享角色物件的參考。你正在突變存盤,這在 redux 中是不應該發生的。
你在舊狀態上呼叫 object.assign,并創建 newState。然而,這只是為新狀態本身創建了一個新的物件。它的所有屬性仍然參考了與舊狀態相同的物件。
你的賦值也是如此 - let character = newState.LoaData.characters[id]; 實際上并沒有在任何時候創建一個新的物件。你需要使用object.assign來實作,一直到你要改變的屬性,或者使用spread operator.
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/326349.html
標籤:
上一篇:無法寫入檔案(python)
