Постоянное обновление списка объектов в списке объектов - PullRequest
1 голос
/ 11 октября 2019

У меня есть требование, чтобы из вызова Axios я получал список объектов, которые необходимо обновить в хранилище приставок.

Например, предположим, что у меня начальное состояние, подобное этому.

const initialState = {

someData: [

  {
    id: 1,
    data: 'some data',
    ...
    chosen: true,
    user:'Joe'
  },
  {
    id: 2,
    data: 'some data',
    ...
    chosen: false,
    user:null
  },
  {
    id: 3,
    data: 'some data',
    ...
    chosen: false,
    user:null
  },
  {
    id: 4,
    data: 'some data',
    ...
    chosen: true,
    user:'Jacob'
  },
  {
    id: 5,
    data: 'some data',
    ...
    chosen: false,
    user:null
  }

]

}


и из вызова Axios я получу список объектов, которые необходимо обновить в магазине.

пример данных полученного списка объектов:

[

  {
    id: 2,
    data: 'some data',
    ...
    chosen: true,
    user:'Jake'
  },
  {
    id: 3,
    data: 'some data',
    ...
    chosen: true,
    user:'Logan'
  },
  {
    id: 5,
    data: 'some data',
    ...
    chosen: true,
    user:'Felix'
  }
]

Я хочу обновить selected и user поле в исходное состояние с массивом selected и user , чтоЯ получил в Axios вызов. Я думал о логике, в которой я могу сравнить идентификатор полученного объекта с идентификатором объекта состояния. Если они равны, я обновлю выбранное и пользователя (используя оператор распространения), если нет, я просто верну объект состояния. Я не уверен, как отобразить состояние или полученный список объектов и сравнить идентификаторы. Пожалуйста, кто-нибудь, помогите мне с этой логикой.

1 Ответ

1 голос
/ 11 октября 2019
return {
      ...state,
      someData: state.someData.map(item => {
        const replaceWith = updatedData.find(
          updatedItem => item.id === updatedItem.id
        );
        return replaceWith
          ? { ...item, chosen: replaceWith.chosen, user: replaceWith.user }
          : item;
      })
    };
...