【问题标题】:Need to write a reducer for adding an new idea element with multiple objects需要编写一个 reducer 来添加具有多个对象的新想法元素
【发布时间】:2019-07-30 22:48:15
【问题描述】:

无法弄清楚如何添加具有多个页面对象的新想法元素。此外,当我添加具有唯一 id 的新想法元素时......我还需要将页面对象连接到现有的想法元素。我将如何使用扩展运算符进行过滤以检查想法元素是否存在,然后连接页面对象,否则添加新元素? 这是我的结构默认数据示例:

    ideaID1: { 0:{title:'first', desc:'abc'}
        1:{title:'second', desc:'lmn'}
        2:{title:'third', desc:'pqr'}
      }
    ideaID2: { 0:{title:'first', desc:'abc'}
        1:{title:'second', desc:'pqr'}
        2:{title:'third', desc:'lmn'}
      }

我想先添加ideaID1(唯一ID),然后在用户保存页面时收到该想法的0、1、2页。所以我需要根据它们属于哪个想法来连接这些页面。有人可以使用扩展运算符帮助我使用缩减器添加一个新想法,然后将页面添加到该想法元素(如果存在)..如果不存在则创建新的?

我收到以下有效载荷并编写了以下减速器

    {ideaID: 1, pagePostion: 0, title:'any', desc: 'abc'}

    {ideaID: 1, pagePostion: 1, title:'any', desc: 'per'}
    case 'ADD_IDEA': 
    return {
    ...state,
    [action.payload.ideaid]:{

        [action.payload.pagePosition]: [...action.payload]
}
  }

我将如何连接第二个有效负载并检查ideaID是否存在,然后连接到它:

     return { ...state, { ...state[action.ideaid], 
     [action.payload.pagePosition]: [...action.payload] } }

如果没有找到ideaID怎么办?

【问题讨论】:

  • 请使用数组而不是类似数组的对象,除非绝对有理由使用后者(显然不是在这种情况下)。
  • 更接近实际问题,您编写的哪些代码不起作用?您能否提供不符合您要求的代码?
  • 我已经用更多信息更新了我的问题
  • 我如何将第二个有效负载连接到同一个ideaID

标签: redux react-redux reducers


【解决方案1】:

你会考虑使用lodash/fp吗? 如果它们不存在,这将创建地图/数组。 您需要按照 cmets 中的建议为您的页面使用数组。

import { set } from 'lodash/fp'

return set(
  [action.ideaid, action.payload.pagePosition],
  action.payload,
  state
)

https://gist.github.com/jfmengels/6b973b69c491375117dc#_setpath-value-object

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-12-01
    • 2015-12-22
    • 1970-01-01
    • 2010-12-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-07
    相关资源
    最近更新 更多