Обновление массива внутри объекта с использованием immutableJS не работает - PullRequest
0 голосов
/ 29 сентября 2018

Я пытаюсь добавить объект в массив, который вложен в объект.Ниже приведена моя структура

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

Теперь я просто пытаюсь обновить содержимое с помощью {fruit:'pear'}.Я использую реактор-редукционный котел пластина.И у меня возникла проблема при попытке обновить содержимое.Вот что я попробовал:

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.contents.

Любое предложение или помощьили обходной путь очень ценится!Заранее спасибо!

1 Ответ

0 голосов
/ 29 сентября 2018

Похоже, что вы сделали опечатку, вы забыли поставить кавычки вокруг содержимого, что приводит к тому, что оно не определено, и поэтому «список» фактически является «данными».

Я думаю, что ваш коддолжно быть:

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