使用apollo

时间:2018-08-19 10:48:09

标签: reactjs graphql apollo serverside-rendering

我正在尝试在Razzle上使用GraphQL / Apollo构建SSR React应用程序。我遵循了using Apollo with SSR的指导,但是有些事情我还无法完全解决,我想知道我是否在这里遗漏了一些东西。

说,在我的应用程序中,该应用程序的每个新用户都有一个basket_id来引用他们的购物车。访问该应用程序后,将检索其购物车的当前状态(其中包含所有物品):

basket(basketId: "abc123") {
  ...BasketFragment
}

这是在服务器上发生的,因为页面首先被呈现,然后才发送给客户端。

他们可以使用类似以下的变体将商品添加到购物车:

addProductToBasket(
  basketId: "abc123"
  productId: 42
) {
  ...BasketFragment
}

响应是带有新添加项目的更新购物篮。此功能非常适合客户端使用,并且使用购物篮更新了缓存,购物篮页面显示了所有项目。

但是,尽管发生了所有这些事情,最初呈现页面的服务器对此一无所知。如果用户刷新页面,则反应服务器将执行basket查询,并查看其Apollo缓存中已经有响应。它不会打扰查询GraphQL服务器,而只是在添加项目之前用开始时具有的购物篮呈现页面。这样会导致页面显示为旧版本的购物篮。

如何防止服务器缓存过时?

理想情况下,我永远不会在服务器上缓存,但似乎无法正常工作。我已经在服务器的Apollo客户端实例上尝试了以下defaultSettings

watchQuery: {
  fetchPolicy: 'network-only',
  errorPolicy: 'ignore',
},
query: {
  fetchPolicy: 'network-only',
  errorPolicy: 'all',
},

0 个答案:

没有答案