React中本地状态更改后重新获取查询的语法是什么



我对Apollo和GraphQL相对陌生,我需要在几个突变后进行重新查询,因为反冲状态不想及时更新,并且在一些突变后会产生一百万个错误。简单地说,我不知道如何做到这一点,也无法找到任何与我的场景相关的文档。以下代码位于App.js文件中。

// Mutations
const { loading: loadingO, error: errorO, data: dataO, refetch: refetchO } = useQuery(GET_OWNER)
const { loading: loadingM, error: errorM, data: dataM, refetch: refetchM } = useQuery(GET_MANAGER)
const handleRefresh = () => {
setRefresh(!refresh)
if (role && id){
if (role == "MANAGER"){
// reftechM
}
if (role == "OWNER"){
// refetchO
}
}
}
useEffect( () => {
console.log("???")
}, [refetchM, refetchO])

其中handleRefresh本质上是在每次突变之后调用的,或者当然是在每次刷新之后调用的。然而,仅仅调用refetch是不起作用的,而且我一直无法为我的问题找到合适的语法。有人知道解决办法吗?

默认情况下,useQuery钩子检查Apollo客户端缓存,以查看您请求的所有数据是否已在本地可用。如果所有数据都在本地可用,那么useQuery将返回该数据,而不查询GraphQL服务器。此缓存优先策略是Apollo客户端的默认获取策略。如果您说您将在突变后调用handleRefresh((,那么下面的代码将正常工作。

此处读取获取策略

const { loading: loadingO, error: errorO, data: dataO, refetch: refetchO } = useQuery(GET_OWNER, {
fetchPolicy: "network-only",
})
const { loading: loadingM, error: errorM, data: dataM, refetch: refetchM } = useQuery(GET_MANAGER, {
fetchPolicy: "network-only",
})
const handleRefresh = () => {
setRefresh(!refresh)
if (role && id){
if (role == "MANAGER"){
refetchM()
}
if (role == "OWNER"){
refetchO()
}
}
}

直接从apollo文档中尝试:

突变后重新匹配查询

在某些情况下,在突变可能是复杂的,甚至是不可能的,如果突变没有返回修改后的字段。

在这些情况下,可以为在突变完成。

有关详细信息,请参见引用查询。

请注意,尽管refetchQueries的实现速度可能比更新功能,它还需要额外的网络请求通常是不可取的。有关更多信息,请参阅此博客文章">

来源:https://www.apollographql.com/docs/react/caching/advanced-topics/

最新更新