【发布时间】:2018-10-02 05:45:07
【问题描述】:
我的问题:
我是 GraphQL 的新手,我正在使用 Apollo 服务器和客户端开发我的第一个全栈应用程序,这是一个简单的博客。
在客户端,我在两个不同的页面中使用相同的查询,但变量不同。查询是通过 ID 或 slug 查询博客文章,具体取决于我使用的页面。所以结果是一样的,只是查询变量发生了变化。
当我在一页中使用查询时,我认为查询不会在第二页上运行,因为 Apollo 缓存。但这不是正在发生的事情。查询在第二个中再次运行,当然返回的结果与其他页面中的结果相同。
为什么 Apollo 在这种情况下不使用缓存?
这是我使用的代码:
在服务器端,我有一个非常基本的查询来从博客中获取文章,可以通过 ID 或 Slug 获取:
type Query {
...
article(id: ID, slug: String): Article
...
}
在客户端,如果文章已发布,我会通过 slug 查询文章,如果仍然是草稿,我会通过 ID 查询。
slug 查询:
<Query
query={article}
variables={{ slug }}
fetchPolicy="cache-and-network"
>
{({ loading, error, data }) => {
return (
<Article
loading={loading}
article={data && data.article}
/>
);
}}
</Query>
ID查询是一样的,只是变量param使用ID:
<Query
query={article}
variables={{ id }}
>
{({ loading, error, data }) => {
return (
<EditArticle loading={loading} article={data && data.article} />
);
}}
</Query>
如您所见,两者都使用相同的 GraphQL 端点,结果是相同的。但是没有使用缓存。
【问题讨论】:
标签: graphql apollo react-apollo apollo-client