我的 reducer 的 switch 语句的一部分以意外的方式工作,请查看代码
A part of a switch statement from my reducer works in an unexpected way, please take a look to the code
我的 reducer 中有这段代码(它的行为是在创建过程中发现的)
case 'UPDATE_GOAL':
state.goals.map( el => {
if (el.id === id*1) {el.goal = updatedGoal.goal}
})
return state
它工作正常,但我很困惑。 map() 函数应该 return 一个新数组然后我必须用一个新数组更新状态,但在这种情况下,似乎 returns 新数组直接到对象和 [= 中的状态更新17=]
请帮助我了解它是如何工作的
是的,映射return是一个新数组。但问题是你正在改变这个数组中的对象,你不能用 el.goal = updatedGoal.goal
.
修改你的 el
当你使用 map
函数时,几乎总是你应该 return 形成它,而不是直接修改底层项目。
尝试完全按照 redux recipes:
case 'UPDATE_GOAL':
return state.goals.map((el, index) => {
if (el.id !== id*1) {
// This isn't the item we care about - keep it as-is
return el
}
// Otherwise, this is the one we want - return an updated value
return {
...el,
goal: updatedGoal.goal
}
})
我的 reducer 中有这段代码(它的行为是在创建过程中发现的)
case 'UPDATE_GOAL':
state.goals.map( el => {
if (el.id === id*1) {el.goal = updatedGoal.goal}
})
return state
它工作正常,但我很困惑。 map() 函数应该 return 一个新数组然后我必须用一个新数组更新状态,但在这种情况下,似乎 returns 新数组直接到对象和 [= 中的状态更新17=]
请帮助我了解它是如何工作的
是的,映射return是一个新数组。但问题是你正在改变这个数组中的对象,你不能用 el.goal = updatedGoal.goal
.
el
当你使用 map
函数时,几乎总是你应该 return 形成它,而不是直接修改底层项目。
尝试完全按照 redux recipes:
case 'UPDATE_GOAL':
return state.goals.map((el, index) => {
if (el.id !== id*1) {
// This isn't the item we care about - keep it as-is
return el
}
// Otherwise, this is the one we want - return an updated value
return {
...el,
goal: updatedGoal.goal
}
})