未处理的拒绝(TypeError):无法读取未定义的属性“ refetch”-GraphQL

时间:2020-02-27 15:23:45

标签: reactjs promise graphql react-apollo

今天,我在React.js项目中遇到了GraphQL的问题。我试图做的是在突变完成后重新获取查询。我的代码库如下

const getUserTeamQuery = useQuery(getUserTeam(usersFragment))
const data = get(getUserTeamQuery, 'data.getUserTeam')

const [updateUser] = useMutation(updateUserMutation(usersFragment), {
  onCompleted: () => {
    getUserTeamQuery.refetch()
  }
})

const updateTeam = async () => {
  await updateUser({ variables: { input: { pullTeam } } })
}

我还在Github上发布了此问题:https://github.com/apollographql/react-apollo/issues/3862

依赖

"@apollo/react-hooks": "^3.1.3",
"apollo-cache-inmemory": "^1.6.3",
"apollo-client": "^2.6.4",
"apollo-link": "^1.2.13",
"apollo-link-context": "^1.0.19",
"apollo-link-error": "^1.1.12",
"apollo-link-http": "^1.5.16",
"apollo-upload-client": "^11.0.0",
"react": "^16.10.2",
"react-apollo": "^3.1.3",

是否有解决此问题的解决方案?

2 个答案:

答案 0 :(得分:1)

这是我如何解决此问题。

const [updateUser] = useMutation(updateUserMutation(usersFragment), {
  refetchQueries: [`getUserTeam`]
})

您应该在useMutation的选项中使用 refetchQueries 而不是 onCompleted

应该可以!

答案 1 :(得分:0)

组件的超快渲染可能会导致这个问题,我通过设置超时 1 秒解决了它,并且它工作得很好。 像这样:

setTimeout(() => refetch(), 1000);