微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何将 react-native / expo 与 Apollo 客户端的持久缓存一起使用?

如何解决如何将 react-native / expo 与 Apollo 客户端的持久缓存一起使用?

我想在我的 expo/react-native 应用程序中本地存储数据。我有一个 GraphQL 端点,我从中使用数据,但我想为每个用户在本地存储数据。

我不知道如何初始化我的客户端并使用 async/await 配置存储持久性。

// app.tsx
export default async function App() {

  const cache = new InMemoryCache();

  const client = new ApolloClient({
    uri: 'https://48p1r2roz4.sse.codesandBox.io',cache
  });
  
  await persistCache({
    cache,storage: AsyncStorage
  })

  return (
    <ApolloProvider client={client}>
      <SafeAreaProvider>
        <Navigation colorScheme={colorScheme} />
        <StatusBar />
      </SafeAreaProvider>
    </ApolloProvider>
  );
}

在此示例中使用 async / await 会导致 expo 失败,因为这是 app.tsx 组件,而且 react-native 似乎不会异步调用它。

我尝试过设置这样的加载状态:

export default function App() {

  const [isLoading,setLoading] = useState(true);
  
  const cache = new InMemoryCache();

  const client = new ApolloClient({
    uri: 'https://48p1r2roz4.sse.codesandBox.io',cache
  });
  
  persistCache({
    cache,storage: AsyncStorage
  }).then(() => {
    setLoading(false)
  })
  
  const isLoadingComplete = useCachedResources();
  const colorScheme = useColorScheme();

  if (!isLoadingComplete || isLoading) { 
    return null;
  } else {
    return (
      <ApolloProvider client={client}>
        <SafeAreaProvider>
          <Navigation colorScheme={colorScheme} />
          <StatusBar />
        </SafeAreaProvider>
      </ApolloProvider>
    );
  }
}

这是正确的设置方式吗?必须手动处理加载状态并使用 .then() 语法似乎很奇怪。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。