我正在嘗試更新嵌套在陣列陣列中的物件。
state = [[{away: "Southampton "
awayTeamScore: null
date: "Sat, October 30th 2021"
dateNative: "2021-10-30T14:00:00Z"
home: "Watford "
homeTeamScore: null
matchId: 327264
matchday: 10
score: "null - null"
time: "16:00"
winner: null}, {..etc}], [{..etc}]]
我正在傳遞我的有效載荷,如下所示:
{matchId: 327264
score: 1
team: "awayTeamScore"}
但是我的 redux 狀態沒有更新,我嘗試關注有關 immer 等的官方檔案。
我的嘗試減速器,使用 createSlice:
import { createSlice, current } from "@reduxjs/toolkit";
export const predictFormSlice: any = createSlice({
name: "predictForm",
initialState: [],
reducers: {
SAVE_FIXTURES: (state: any, action) => {
state.push(action.payload);
},
UPDATE_PREDICTIONS: (state: any, action) => {
state = state[0].map((element: any[]) => {
let game = element.find((game: { matchId: any }) => game.matchId === action.payload.matchId);
if (game) {
game = action.payload;
}
});
},
},
});
export const { SAVE_FIXTURES, UPDATE_PREDICTIONS } = predictFormSlice.actions;
export default predictFormSlice.reducer;
在 reducer中使用matchId更新awayTeamScore和homeTeamScore的鍵會很好。我的操作是將有效負載成功發送到UPDATE_PREDICTION減速器,只是不更新??狀態,我只是想先完全替換物件,然后再關注某些鍵。
uj5u.com熱心網友回復:
這里有幾件事:
- 您對修改物件和重新分配變數感到困惑。你可以這樣做,它會改變to的
variableName.foo = 5屬性foo。但是,如果您這樣做,您會將值分配給變數,但不會再有任何連接 -不會改變。你在這兩個和這里都這樣做:你重新分配兩個變數,但你“改變”什么。variableName5let foo = variableName.foo; foo = 55foovariableNamevariableNamestategame - 你創建一個全新的陣列
.map- 你不需要在 immer reducer 中這樣做。
這將通過“物件修改”方法而不是重新分配事物來解決這個問題。
UPDATE_PREDICTIONS: (state: any, action) => {
for (const element of state[0]) {
let idx = element.findIndex((game: { matchId: any }) => game.matchId === action.payload.matchId);
if (idx >= 0) {
element[idx] = action.payload;
}
};
},
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/490048.html
標籤:打字稿 还原 redux 工具包 redux-reducers
上一篇:打字稿錯誤:型別'{道具:IDrink;}'不可分配給型別'IntrinsicAttributes&IDrink'
下一篇:提高具有許多影片的網站的性能
