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