Apollo / React: управление состоянием для компонентов асинхронной страницы, которые отключаются при выходе из системы?

На рисунке ниже показана конечная точка / library приложения Apollo / React с такой структурой:

   <App/>
     <Home/>
     <Library/> // Only renders if a user is logged in

Apollo / React: управление состоянием для компонентов асинхронной страницы, которые отключаются при выходе из системы?

Если пользователь вошел в систему, компонент приложения получает из моей серверной базы данных (внутри запроса «я») идентификаторы игр в библиотеке пользователя, и, когда пользователь переходит в библиотеку, эти идентификаторы используются для получения игр. детали из стороннего API.

Эта выборка в настоящее время выполняется с помощью Apollo useQuery () в <Library/>, но это вызывает обычное предупреждение Can't perform a React state update on an unmounted component, когда пользователь выходит из системы и <Library/> размонтируется.

Что было бы лучшим местом и методом для работы с асинхронным состоянием этого компонента? (без Redux). Поднять состояние до компонента приложения? Какой-то useEffect в компоненте библиотеки с useLazyQuery вместо useQuery?

Ура =)



Обновлено: по запросу, вот упрощенная версия компонента библиотеки (он извлекает идентификаторы игр непосредственно из серверной части, не требуя идентификаторов игр из запроса me)

const Library = () => {
  const { data: libraryResponse, loading: libraryLoading } = useQuery(
    GET_LIBRARY
  );

  if (libraryLoading) return <FullPageSpinner />;

  const games = libraryResponse?.getLibrary;

  if (!games) {
    return (
      <div>
        <div>Your library is empty.</div>
        <Link to = {'/home'}>Click here to find games!</Link>
      </div>
    );
  }

  return <GameList games = {games} />;
};


edit2: Я могу подтвердить, что использование useLazyQuery + useEffect вместо useQuery избавляется от предупреждения, я не уверен, идеально ли это или предназначено:

Если вам не нужен ваш запрос к компоненту приложения, имеет смысл просто оставить его в <Library/>. Я все еще не уверен, что находится внутри вашей библиотеки и как она работает, поэтому можете ли вы предоставить больше кода. Однако похоже, что многие люди получали это предупреждение. В github есть огромная ветка, в которой рассказывается о вашей конкретной проблеме. github.com/apollographql/apollo-client/issues/6209 Вы также можете использовать useLazyQuery и просто вызвать свой эффект при монтировании, если это сработает для вас

Leomar Amiel 07.04.2021 11:02

Спасибо, добавил упрощенную версию <Library/> =) Я попробую использовать useLazyQuery, но разве асинхронный ответ uselazyquery не вызовет такую ​​же потенциальную проблему, если ответ приходит после выхода пользователя из системы и размонтирования компонента? Я видел несколько причудливых решений для этого, например, компонент useAsync headbutt.io/picking-apart-kents-useasync Kent C Dodd / s, но они немного сложны для моих целей, и мне было интересно, предоставил ли Apollo более простой способ.

HigoChumbo 07.04.2021 11:40

Я могу подтвердить, что использование useLazyQuery + useEffect вместо useQuery избавляет от предупреждения, я не уверен, идеально это или задумано. github.com/apollographql/apollo-client/issues/…

HigoChumbo 07.04.2021 12:37

Да, кажется слишком сложным использовать тот, который вы упомянули, с useasync, поскольку большая часть того, что вам нужно, уже предоставлено в Apollo.

Leomar Amiel 07.04.2021 16:09
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Навигация по приложениям React: Исчерпывающее руководство по React Router
Навигация по приложениям React: Исчерпывающее руководство по React Router
React Router стала незаменимой библиотекой для создания одностраничных приложений с навигацией в React. В этой статье блога мы подробно рассмотрим...
Массив зависимостей в React
Массив зависимостей в React
Все о массиве Dependency и его связи с useEffect.
0
4
22
0

Другие вопросы по теме