使用 array.find 为 redux return 引用或值更新状态?
Update state using array.find for redux return reference or value?
我在看官网的教程
我知道状态是不可变的,在reducer中的操作实际上是创建一个新的状态副本,修改它并替换原来的。
我在想:
是不是应该删除数组中的条目(exisitngPost)并推入一个新条目?因为 state.find() 应该 return 按值而不是引用。我弄错了吗?还是跟 reducer 逻辑有关?
const postsSlice = createSlice({
name: 'posts',
initialState,
reducers: {
postAdded(state, action) {
state.push(action.payload)
},
postUpdated(state, action) {
const { id, title, content } = action.payload
// where i find confused<<<<<<<<<<<<<<<<<<<
const existingPost = state.find(post => post.id === id)
if (existingPost) {
existingPost.title = title
existingPost.content = content
}
}
}
})
export const { postAdded, postUpdated } = postsSlice.actions
export default postsSlice.reducer
state.find
returns 状态中的对象 - 如果它不是原始对象,则该对象将是一个引用。因此,此时在 RTK immer reducer 中,您可以对其进行修改,并且在 reducer 运行 之后,将为您创建一个包含应用更改的新的不可变副本,而不是修改原始副本。
我在看官网的教程
我知道状态是不可变的,在reducer中的操作实际上是创建一个新的状态副本,修改它并替换原来的。
我在想: 是不是应该删除数组中的条目(exisitngPost)并推入一个新条目?因为 state.find() 应该 return 按值而不是引用。我弄错了吗?还是跟 reducer 逻辑有关?
const postsSlice = createSlice({
name: 'posts',
initialState,
reducers: {
postAdded(state, action) {
state.push(action.payload)
},
postUpdated(state, action) {
const { id, title, content } = action.payload
// where i find confused<<<<<<<<<<<<<<<<<<<
const existingPost = state.find(post => post.id === id)
if (existingPost) {
existingPost.title = title
existingPost.content = content
}
}
}
})
export const { postAdded, postUpdated } = postsSlice.actions
export default postsSlice.reducer
state.find
returns 状态中的对象 - 如果它不是原始对象,则该对象将是一个引用。因此,此时在 RTK immer reducer 中,您可以对其进行修改,并且在 reducer 运行 之后,将为您创建一个包含应用更改的新的不可变副本,而不是修改原始副本。