Как правильно положить sh объект на данные из Apollo Client - PullRequest
0 голосов
/ 16 апреля 2020

У меня есть этот запрос для извлечения данных.

const {data , loading, erorr, fetchMore,} = useQuery(GET_USERS,{
       variables: { cursor:  "" },
    })

После получения данных я передаю его в formData.

const formatData = (data, numColumns) => {
  const numberOfFullRows = Math.floor(data.length / numColumns);

  let numberOfElementsLastRow = data.length - (numberOfFullRows * numColumns);
  while (numberOfElementsLastRow !== numColumns && numberOfElementsLastRow !== 0) {
    data.push({ key: `blank-${numberOfElementsLastRow}`, empty: true });
    numberOfElementsLastRow++;
  }

  return data;
};

data.pu sh выдает ошибку, Попытка назначить только для чтения собственности. Мой вопрос: как я могу правильно использовать data.pu sh для данных, получаемых из useQuery?

1 Ответ

2 голосов
/ 16 апреля 2020

Данные от клиента Apollo неизменны (не могут быть изменены). Вам нужно будет создать клон данных либо путем создания глубокого клона (используя что-то вроде loda sh), либо путем распространения свойств вашего объекта на новый объект:

const { data , loading, error, fetchMore } = useQuery(GET_USERS,{
  variables: { cursor:  "" },
})

const mutableUsers = data.users.map(_ => {..._}); // Not sure this will work, can't remember how deep the immutability runs on these objects

Кроме того, вы не должны изменять данные, возвращаемые из запроса Apollo, так как это испортит локальный кеш (отсюда и объекты, которые нужно изменить с самого начала). Для справки: https://www.apollographql.com/blog/previewing-the-apollo-client-3-cache-565fadd6a01e

Результаты InMemoryCache заморожены / неизменны

...