需要编写一个reducer以添加具有多个对象的新idea元素

时间:2019-03-08 21:13:28

标签: redux react-redux reducers

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

    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页。因此,我需要根据它们属于哪个创意来合并这些页面。有人可以通过化简运算符帮助我使用reducer添加一个新的想法,然后将页面添加到该idea元素(如果不存在的话)。如果不存在,则创建一个新的想法?

我正在接收以下有效负载并编写了以下reducer

    {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怎么办?

1 个答案:

答案 0 :(得分:0)

您会考虑使用lodash/fp吗? 如果地图/数组不存在,则会创建地图/数组。 您需要按照评论中的建议在页面上使用数组。

import { set } from 'lodash/fp'

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

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