javascript - 根据条件修改 Redux 中的对象数组

标签 javascript arrays reactjs redux lodash

在我的 Redux 应用程序中,我有一个对象数组,表示开业商店的日期和时间列表,如下所示:

[{day: 'Monday', from:'10', to:'18'}, {day: 'Tusday', from: '8', to:'16'}, {...}]

我创建了一个包含一周中的天数列表的组件。单击一天中的某一天时,将使用代表一天的有效负载完成调度:

{day: 'Monday', from:'10', to:'18'}

我从一个空数组开始,将一个 dayObject 插入该数组。当我再次推送同一个对象时,这意味着我想删除它(在 React 组件上取消选中它)。

当我更改一天对象的开放时间时,我会再次推送它,并更改开放时间,因此我想删除旧对象并将新对象推送到数组中,并使用新的时间。

  if(_.some(days,
    {
      day: action.payload.day
    }
  )) {
    // replace current object, how ?

  } 

  if(_.some(days,
    {
      day: action.payload.day,
      from: action.payload.from,
      to: action.payload.to
    }
  )) {
    // duplicate, uncheck on UI so remove it
    _.remove(days {day: action.payload.day})
  } else {
    days.push(action.payload)
  }

所以,看起来我的问题在于检测该对象是否是重复的或者是某个 dayObject 的修改版本,所以我应该替换它。有什么帮助吗?

最佳答案

首先,您可以以 {type: 'ACTION_TYPE', ...} 格式分派(dispatch)操作。这使您能够指定操作类型,以便指示您的 reducer 如何使用有效负载。我想像 {type: 'REMOVE_DAY', day: {}}{type: 'UPDATE_HOUR', day: {}} 这样的操作。

另一件重要的事情是了解您的模型和数据结构。例如,使用带有 id 的对象而不是普通数组会更好吗?这样你就可以使用 id 来引用你的日子,而不是传递整个对象。

// Example reducer
const store = (state, action)=> {
  switch (action.type) {
    case 'ADD_DAY':
      return [...state, action.payload];
    case 'REMOVE_DAY':
      return state.filter((date)=>(date.day !== action.payload.day));
    case 'UPDATE_DAY':
      return state.map((date)=>{
        if (date.day === action.payload.day) {
          return {...date, ...action.payload};
        }
        return date;
      });
    default:
      return state;
  }
}

// Example action creator
const updateDay = (payload)=>{
  return {
    type: 'UPDATE_DAY',
    payload
  }
}

关于javascript - 根据条件修改 Redux 中的对象数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38529519/

相关文章:

javascript - jQuery/Svg : increment value "dur" when key is pressed

c - K&R 第 2 版,示例 1.9 字符数组

c++ - 如何修复 'invalid operands to binary expression' ?

react-router - 使用 React Router 进行转换/重定向的真正正确方法是什么?

javascript - FontAwesome [Webpack] 未加载

javascript - 解析运行时 Javascript 属性的 Typescript 编译器消息

javascript - NicEdit textarea如何添加滚动条?

javascript - 单击页面加载触发器 (UL > LI)

arrays - 如何将图像数组映射为每个列表项React JS的两个图像

reactjs - 使用 React.lazy 时未捕获未定义错误