当前位置: 首页 > 知识库问答 >
问题:

Apollo无法访问更新中的查询变量:发生突变后

曹凯泽
2023-03-14

我正在尝试使用update:在执行变异后更新查询。问题是存储区中的查询应用了几个不同的变量,我想更新查询并使用相同的变量返回它。

我在文档中发现,updateQueries有一个选项可以包含queryVariables,queryVariables是执行查询时使用的最后一组变量。

我没有找到任何描述如何从更新内部检索queryVariables或类似内容的内容。

更新内部:我可以使用

lastQuery = Object.keys(store.data.ROOT_QUERY).slice(-1)[0]

它将返回一个类似于“userRecipes({“first”:20,“minTime”:0,“maxTime”:500,“filterType”:“Explore”,“searchTerm”:“})”的结果

我现在这样做的方法是解析该字符串以提取变量,这样我最终可以像这样使用readQuery:

      const lastQuery = Object.keys(store.data.ROOT_QUERY).slice(-1)[0] 
      const searchPosition = lastQuery.search("searchTerm")
      const searchTerm = lastQuery.slice((searchPosition + 13),-3)

      // also parsing the lastQuery string for filterType, minTime, maxTime

      const data = store.readQuery({ 
        query: QUERY_USER_RECIPES, 
        variables: { 
                filterType: filterType,
                searchTerm: searchTerm,
                minTime: minTime,
                maxTime: maxTime,
        }
      });

这不是最好的方法。有没有更简单的方法来访问更新中的变量?

似乎应该有一种方法可以读取存储区中的现有查询和变量,而无需使用readQuery传递变量。

感谢您关注此问题!

版本

阿波罗-client@1.4.0反应-apollo@1.4.2

共有1个答案

微生俊
2023-03-14

对于阿波罗2号,但在1号中应该是相同的。x个

在文档中,您可以看到还可以将变量传递给readQuery。

下面是一个示例,用户可以单击BookEvent组件预订事件,如果变异成功,它会自动反映在上面的组件EventDetail中。

在触发突变的组件(BookEvent)中,我将存储和事件ID传递给上部组件(EventDetail)中声明的函数,并传递子组件的道具:

const onClick = () => createEventTicketMutation({
  variables: { eventId: event.id },
  update: (store, { data: { createEventTicket } }) => {
    updateStoreAfterBooking(store, event.id)
  },
})

下面是在上部组件中执行缓存更新的函数:

const updateCacheAfterBooking = (store, eventId) => {
  const data = store.readQuery({
    query: EVENT_DETAIL_QUERY,
    variables: { id: eventId },
  })
  data.eventDetail.bookings += 1
  store.writeQuery({
    query: EVENT_DETAIL_QUERY, 
    variables: { id: eventId },
    data,
  })
}

它是这样传递的<代码>

不要忘记将所需的变量传递给writeQuery。

 类似资料:
  • 我正在使用Apollo服务器,试图为一个电子商务应用程序构造一个嵌套查询。我正在查询一个rest api以检索购物篮中的物品。 然而,此请求的响应并不包含我们需要的所有产品信息。因此,我尝试嵌套一个附加查询,使用返回的参数之一作为变量,以获得所需的附加产品信息。 我已经看到了嵌套查询示例,据我所知(我对GraphQL和Apollo尤其陌生),这是GraphQL的一大优点。但是我还没有看到任何嵌套查

  • 问题内容: 我正在尝试在cgo中访问ac struct,但是要这样做 无法确定C.utmpx的名称种类 utmpx是结构 这是执行代码: 在utmpx.h文件中,有 我可以使用_PATH_UTMPX,但在使用UTMPX_FILE时也会收到相同的警告,为什么? 看来我无法访问在.h文件中声明的这些变量,该怎么办? 平台:macOS sirria,go 1.8 问题答案: 我必须定义_GNU_SOUR

  • 问题内容: 我有服务 即使在控制器中也可访问 有人可以解释一下为什么在angular.foreach中无法访问“ this.list”吗?如何访问“ this.list”? 问题答案: (请参阅http://docs.angularjs.org/api/angular.forEach)函数中的最后一个参数是的上下文。因此,您需要这样的东西:

  • 我刚刚开始在Apollo和Vue中使用GraphQL,所以这可能是一个“愚蠢”的问题,但我不知道怎么做。 如何在同一个视图中执行查询以获取一个对象,并使用变异更新它 假设我有一个简单的模式 和vue组件 现在我应该如何编写模板部分?我可以将产品对象链接到输入中的v模型吗? 谢谢你的帮助。

  • 我有一个Apollo Graphql客户端项目。我尝试在查询中使用变异。但它似乎忽略了更新突变,因为查看效果很好。请帮助澄清问题。 我在改变编码方式方面做了很多尝试。在compose中交换变异和查询。更改更新文档的方式。但无法得到它。 我的代码如下:

  • 我有以下代码,我正在尝试决定如何处理错误: 服务器发回一个GraphQL错误对象,并将其发回,使其出现在突变的块中。如果变异成功,组件的数据将使用参数更新,但我看不到处理错误的等价方法。 理想情况下,我希望更新块中的Apollo缓存,但在这一点上,我甚至不能向组件或状态注入道具。 最终的结果是在Register组件上设置一个prop/state,它显示了一个带有条件呈现的错误消息组件。一种方法可以