【问题标题】:Updating a array inside object using immutableJS is not working使用 immutableJS 更新对象内部的数组不起作用
【发布时间】:2018-09-29 17:15:11
【问题描述】:

我正在尝试在嵌套在对象内的数组中添加一个对象。以下是我的结构

{
    id:'1',
    name:'test',
    contents:[
        {fruit:'banana'}
        {fruit:'apple'}
    ]
}

现在我只是想用{fruit:'pear'} 更新内容。 我正在使用react-redux-boiler 盘子。我在尝试更新内容时遇到问题。 这是我尝试过的:

const initialState = fromJS({
  data: {
    content: []
  }
});

function projectReducer(state = initialState, action) {
  switch (action.type) {
    case LOAD_DATA:
      return state
        .set('loading', true)
        .set('error', false)
        .setIn(['data', 'contents'], false);
    case LOAD_DATA_SUCCESS:
      return state
        .setIn(['data', 'contents'], action.data)
        .set('loading', false);
    case ADD_CONTENT:
      return state
        .set('loading', true)
        .set('error', false)
      // return return update(state[state.set(['data'],data)
    case ADD_CONTENT_SUCCESS:
      console.log('addContentSuccess');
      return state
        .updateIn(['data','contents'],list=>list.push({fruit:'pear'}))         //<<<<<THis is failing
        .set('loading', false)
        .set('error', false)
      break;
    default:
      return state;
  }
}

我得到的错误是push is not a function,这是正确的,因为 list 是整个对象,而不是 list.contents。

非常感谢任何建议或帮助或解决方法!提前致谢!

【问题讨论】:

  • 我猜LOAD_DATA_SUCCESS 之后的内容不是List。将其更改为.setIn(['data', 'contents'], List(action.data))

标签: reactjs redux immutable.js react-boilerplate


【解决方案1】:

看起来你打错了,你忘了在内容周围加上引号,导致它没有定义,因此'list'实际上是'data'。

我认为你的代码应该是:

return state
    .updateIn(['data', 'contents'], list => list.push({fruit:'pear'}))

【讨论】:

  • 啊,对不起,我的错,实际上在原始代码中,它的“内容”我只是在这里输入,这是一个错误,让我更新代码
  • 嗯,那么您的 Redux 代码似乎有问题,因为当我只运行 ImmutableJS 代码时,它似乎可以工作:codepen.io/Risc12/pen/QZbjdY 是否可能是 initialState 定义了“内容” '内容'?
猜你喜欢
  • 1970-01-01
  • 2016-05-04
  • 2019-06-06
  • 1970-01-01
  • 1970-01-01
  • 2021-10-09
  • 2023-04-02
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多