Apollo无法在更新中访问queryVariables:突变后

时间:2017-08-16 17:42:37

标签: reactjs apollo react-apollo apollo-client

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

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

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

更新内部:我可以使用

a, b = y.reshape(y.shape[0]//2, 2).T
print(a)
#array([0, 1, 2])
print(b)
#array([0, 1, 2])

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

之类的结果

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

"userRecipes({"first":20,"minTime":0,"maxTime":500,"filterType":"Explore","searchTerm":""})"

这可能是最好的方法。是否有更简单的方法来访问更新内的变量?

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

感谢您查看此问题!

apollo-client@1.4.0 react-apollo@1.4.2

1 个答案:

答案 0 :(得分:0)

对于apollo 2,但在1.x中应该相同

In the docs,您看到您也可以将变量传递给readQuery。

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

在触发变异的组件(BookEvent)中,我将storeeventId传递给在上部组件(EventDetail)中声明的函数,并通过子组件的props传递:

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,
  })
}

<BookEvent updateStoreAfterBooking={updateCacheAfterBooking} ... />一样传递。

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