我正在尝试使用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
答案 0 :(得分:0)
对于apollo 2,但在1.x中应该相同
In the docs,您看到您也可以将变量传递给readQuery。
以下是用户可以预订单击BookEvent组件的事件的示例,如果突变成功,则会自动反映在上部组件EventDetail中。
在触发变异的组件(BookEvent)中,我将store
和eventId
传递给在上部组件(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。