【问题标题】:Pushing an object on array of objects returns array size将对象推入对象数组会返回数组大小
【发布时间】:2017-10-21 00:36:01
【问题描述】:

我正在使用 react-boilerplate 构建一个应用程序,人们可以在其中制作和编辑事件。这个样板使用了 immutable.js,所以我想学习它。

当我将事件保存到数据库时,数据库将事件作为对象返回。

console.log(action.payload.event) 

会打印

{
  color:"#000000",
  name:"my Event",
  _id:"59ea882a58a83d20d400cd21",
}

然后我想将此对象推送到其他事件的数组中。用户登录时会填充事件。

我的减速器是这样的

import { fromJS } from 'immutable';
import { ADD_EVENT_REQUEST_SUCCESS } from './constants';

const initialState = fromJS({
  events: null
});

function eventsOverviewReducer(state = initialState, action) {
  switch (action.type) {

    case ADD_EVENT_REQUEST_SUCCESS:
      return state
        .update('events', list => list.push( action.payload.event ));

    case LOGIN_SUCCESS:
      const user = action.payload.user;
      return state
        .set('events', user.events)

    default:
      return state;
  }
}

但是,此更新语句现在将存储中的事件设置为数组的大小。如何将我的对象推送到状态?

【问题讨论】:

  • 好吧,.push() 方法返回新的数组长度,因为这是它应该做的。我不使用 Redux,但我猜 list => { list.push( action.payload.event ); return list } 可能更接近你想要的?

标签: javascript redux react-redux immutable.js


【解决方案1】:

听起来您的events 不是Immutable.List。当您设置 events 时,您应该将其创建为列表而不是常规数组:

case LOGIN_SUCCESS:
  return state
    .set('events', List(user.events))

那么events.push会正确返回新列表。

【讨论】:

    猜你喜欢
    • 2020-03-23
    • 2017-12-05
    • 2023-03-29
    • 2017-06-24
    • 1970-01-01
    • 2016-05-09
    • 2023-03-14
    • 1970-01-01
    相关资源
    最近更新 更多