我正在努力熟悉Redux,試圖建立一個簡單的todo串列。我很難理解為什么用這段代碼我不能從串列中洗掉一個todo。我想為每個todo使用索引而不是通常的id。這是我目前所做的作業:
export const saveTodo = createSlice({
name: 'manageList',
初始狀態。
reducers: {
addTodoToList: (state, action) => {
state.todoList.push(action.payload)
},
removeTodoToList: (state, action) => {
state.todoList.filter((todo, index) =>/span> index ! == action.payload)
}
}
})
這是在List組件內部,我在這里調度了reducer:
這是在List組件內部。
<div className='list'/span>>
{todoList?.map((todo, index) => {
return < h1 key={index}> {todo}< span onClick={() => dispatch(removeTodoToList(index))}> x</span></h1>
})}
</div>
為什么這種方法不起作用?考慮到redux工具包的使用,我是否應該使用像splice這樣的突變性函式來代替?給todo分配一個id,會讓它成為一個更好的過濾選擇嗎?
uj5u.com熱心網友回復:
過濾器創建一個新的陣列按照這里的檔案
。這意味著state.todoList.filter((todo, index) => index !== action.payload)正在過濾并創建一個新陣列,它只是沒有被分配給你的狀態。
因此,你可以做以下任何一個:
// example 1
state.todoList = state.todoList。 filter((todo, index) => index !== action.payload)
//示例2
return {
...狀態。
todoList: state.todoList。 filter((todo, index) => index !== action.payload)
}
考慮到redux工具包的用法,我是否應該使用像splice這樣的突變性函式來代替?給todo分配一個id,會不會讓它成為一個更好的過濾選擇? 謝謝
這是由偏好決定的。由于我來自史前時代(pre toolkit/immer),所以我更喜歡使用不改變狀態的語法。但作為一個一般性的建議,只要使用你所熟悉的,并堅持使用它。
不過需要注意的是,不改變狀態的語法更有利于向后兼容;所以如果你經常使用它,那么當你不得不重構/維護不使用 toolkit 或 immer 的 redux 代碼時,你將會有更好的準備。
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/332296.html
標籤:
