如何在ImmutableJS中的Record中正确地将元素推送/弹出到数组

时间:2017-05-11 14:17:49

标签: reactjs redux immutable.js

我有一个来自ImmutableJS的Record对象,我正在尝试使用stack将一个元素推送到Record中的属性withMutations数组中:

/* eslint-disable new-cap */
const InitialState = Record({
  isOpen: true,
  item: null,
  type: '',
  stack: []
});

/* eslint-enable new-cap */
const initialState = new InitialState;

export default function modal(state = initialState, action) {
  ...
  return state.withMutations((ctx) => {
    const newStack = ctx.get('stack');
    newStack.push({
        item: action.item,
        type: action.type
    });

    ctx.set('isOpen', true)
      .set('item', action.item)
      .set('type', action.type)
      .set('stack', newStack);
   });
});

但是,这似乎取消了Record中的stack属性。 当我这样做时,它正确地将数组设置为stack

return state.withMutations((ctx) => {
  ctx...
     .set('stack', [{
       item: action.item,
       type: action.type
     }]);
});

因此,

两个问题

一个。如何使用数组设置stack属性?

B中。应该如何在ImmutableJS中将对象推送/弹出数组?

1 个答案:

答案 0 :(得分:0)

我最终做的是:

<强>推

/* eslint-disable new-cap */
const InitialState = Record({
  isOpen: true,
  item: null,
  type: '',
  stack: List()
});

return state.withMutations((ctx) => {
   ctx...
      .update('stack', stack => stack.push({
        item: action.item,
        type: action.type
      }));
});

<强>弹出

return state.withMutations((ctx) => {
   ctx...
      .update('stack', stack => stack.pop());
});