Не работает обновление свойства объекта в массиве в хранилище NGRX / Redux - PullRequest
0 голосов
/ 16 мая 2018

В моем Редукторе я пытаюсь обновить свойство объекта в массиве, содержащемся в коллекции словарей, но это не работает, и я не могу понять, почему. Свойство results моего состояния - это словарь пар ключ / значение, а значение - массив.

Я пытался использовать функцию карты для создания нового массива, но мои результаты и состояние не обновляются. Это мой код:

 case LOAD_SUCCESS: {
      const form = (action as LoadSuccessAction).form;

      return {
         results: {
           ...state.results,
           ...state.results['FORMS'].map(item => 
             item.id === form .id
              ? {...item, 'categories': form.categories}
              : item)           
         },    
        loading: false,
        loaded: true
      };
    } 

Что я делаю не так?

1 Ответ

0 голосов
/ 16 мая 2018

Здесь:

...state.results['FORMS'].map(…),

вы объединяете массив обновленных элементов (обновленный FORMS) со свойством results состояния (объект , содержащий FORMS).

Если бы категории и идентификаторы элемента были числами, конечный результат выглядел бы так (отображается только results):

{
    '0': { categories: 15, id: 10 },
    '1': { categories: 7, id: 11 },
    FORMS: [ /* its original content before the update */ ],
}

Вместо этого вы должны установить свойство FORMS нового состояния для вашего обновленного массива:

return {
    // loaded, loading…
    results: {
        ...state.results,
        FORMS: state.results.FORMS.map(
            item => item.id === form.id ? {
                ...item,
                categories: form.categories,
            } : item,
        ),
    },
}
...