【问题标题】:Update state with dynamically constructed object using reducers in React在 React 中使用 reducers 使用动态构造的对象更新状态
【发布时间】:2020-02-27 16:49:21
【问题描述】:

我有一个值数组,它们在状态中设置为布尔值。我需要遍历数组并将每个值设置为有效负载(真)。下面的代码可以正常工作,但我正在寻找一种方法来实现任意数量的相同结果。

criticals = ["critical-1-524", "critical-4-572", "critical-15-24", "critical-30-48"]

return {
      ...state,
      mapboxToggleLayers: {
        ...state.mapboxToggleLayers,
        [criticals[0]]: action.payload,
        [criticals[1]]: action.payload,
        [criticals[2]]: action.payload,
        [criticals[3]]: action.payload
      }
    }

这是我的工作版本,但这会删除它的状态对象中的所有值。

return {
  ...state,
  mapboxToggleLayers: {
    ...state.mapboxToggleLayers
    [criticals.map(el => {
      let critObj = {}
      return critObj[`${el}`] = action.payload
    })]
  }
}

【问题讨论】:

  • 顺便说一下我在用钩子
  • 你能显示你的状态吗?
  • mapboxToggleLayers: { "someValue": true },
  • 任意值在出现时将以相同的格式添加到此状态

标签: reactjs react-hooks reducers


【解决方案1】:

问题是criticals.map 将返回一个数组。根据您的示例,您似乎需要动态创建一个对象。您可以将reduce 与展开运算符一起使用:

return {
  ...state,
  mapboxToggleLayers: {
    ...state.mapboxToggleLayers,
    ...criticals.reduce((result, key) => {
      return {...result, [key]: action.payload}
    }, {})
  }
}

【讨论】:

  • 成功了,非常感谢。我的声誉太低,无法给您投票,但感谢您的帮助和解释。现在说得通了。
  • 不客气!您可以通过点击投票按钮下方的“复选标记”按钮来接受答案。
猜你喜欢
  • 2018-10-14
  • 1970-01-01
  • 2019-07-14
  • 2020-05-01
  • 2016-11-25
  • 2018-09-08
  • 1970-01-01
  • 2018-03-20
  • 1970-01-01
相关资源
最近更新 更多