我的化简器中的 switch 语句的一部分以意想不到的方式工作,请查看代码



我的化简器中有这段代码(它的行为是在创建过程中发现的(

case 'UPDATE_GOAL':
state.goals.map( el => {
if (el.id === id*1) {el.goal = updatedGoal.goal}
})
return state

它工作正常,但我很困惑。 map(( 函数应该返回一个新数组,然后我必须用一个新数组更新状态,但在这种情况下,似乎它直接将新数组返回给对象,并且状态以"错误的方式"更新

请帮助我了解它是如何工作的

是的,映射返回一个新数组。但问题是您正在更改此数组中的对象,您无法使用el.goal = updatedGoal.goal修改您的el

当你使用map函数时,几乎总是你应该只从它那里返回一些东西,而不是直接修改底层项目。

尝试完全按照 redux 配方执行此操作:

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
}
})

相关内容

最新更新