我的化简器中有这段代码(它的行为是在创建过程中发现的(
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
}
})