【发布时间】:2021-04-29 04:23:12
【问题描述】:
我有一个网站,可以向用户展示不同类型的项目。我正在使用Hasura、NextJS 和Apollo 来实现这一点。我现在遇到的问题是,每次我回到主页(我展示我的项目的地方)时,查询都会再次被触发并且必须重新加载。我想将数据保存在我的缓存中,但我不知道该怎么做。
这就是我现在的做法:
我正在调用查询,当它完成加载后,我会返回带有数据的 Home 组件。
const ProjectList = () => {
const { loading, error, data } = useQuery(GET_PROJECTS);
if (loading) {
return <div>Loading...</div>;
}
if (error) {
console.error(error);
return <div>Error!</div>;
}
return <Home projects={data.projects} />;
};
export default withApollo({ ssr: true })(ProjectList);
在我知道的home组件中可以使用数据:
const Home = ({ projects }) => {
// rest code...
}
我按以下方式创建我的 apolloClient:
export default function createApolloClient(initialState, headers) {
const ssrMode = typeof window === 'undefined';
let link;
if (ssrMode) {
link = createHttpLink(headers); // executed on server
} else {
link = createWSLink(); // executed on client
}
return new ApolloClient({
ssrMode,
link,
cache: new InMemoryCache().restore(initialState),
});
}
有没有办法可以将数据保存在缓存中,这样就不用每次回到首页都等待加载状态了?
【问题讨论】:
标签: reactjs graphql next.js apollo hasura