Javascript Apollo useLazyQuery完成时监听

Javascript Apollo useLazyQuery完成时监听,javascript,reactjs,react-apollo,Javascript,Reactjs,React Apollo,我正在使用Apollo的graphql作为注册页面。 onSubmit我想发送一个查询以确认用户名是否唯一(目前正在统计用户,我知道我应该检查是否存在,但不包括此问题的范围) 我做那件事有几个问题。 使用useQuery立即发送查询-我无法选择在提交时发送查询。 使用useLazyQuery在调用user\u count时发送延迟查询。 ->问题:它既不是承诺,也不是完成的功能(存在于useQuery中并在查询完成后执行的函数) useLazyQuery是如何工作的?它执行查询。这些值可以通过d

我正在使用Apollo的graphql作为注册页面。
onSubmit
我想发送一个查询以确认用户名是否唯一(目前正在统计用户,我知道我应该检查是否存在,但不包括此问题的范围)

我做那件事有几个问题。 使用
useQuery
立即发送查询-我无法选择在提交时发送查询。 使用
useLazyQuery
在调用
user\u count
时发送延迟查询。 ->问题:它既不是承诺,也不是完成的功能(存在于
useQuery
中并在查询完成后执行的函数)

useLazyQuery
是如何工作的?它执行查询。这些值可以通过
data\u user
访问,一旦查询完成,就会更新这些值<代码>数据\u用户最初是
未定义的

由于
useLazyQuery
不返回承诺,我决定创建自己的承诺式监听器。 据我所知,推荐的方法是使用
代理
。问题是:试图设置
target=data\u user
抛出

Cannot create proxy with a non-object as target or handler
我可以用一个
setCallback
函数来解决这个问题,该函数每隔几毫秒查找一次更改,但感觉很脏


导出默认函数注册(){
const[state,setState]=useState([])
const[user_count,{loading,data:data_user}]=useLazyQuery(user_count);
const handleSubmit=事件=>{
event.preventDefault();
const proxy=新代理(数据用户、{
设置:功能(目标、道具、值){
如果(prop==='userCount'){
console.log(“查询完成”)
const user_exists=数据_user.userCount!==0;
log(`User exists:${User\u exists}`)
}
}
})
用户计数({
变量:{
名称:state.value
}
});

您可以使用窗口中止控制器取消请求

在此处了解更多信息:


在文章的结尾,检查完整的示例,希望它能帮助您解决这个问题

我通过直接使用
useAppolloClient
解决了这个问题:

const client=useAppolloClient();
const handleSubmit=事件=>{
event.preventDefault();
客户
.查询({
查询:用户计数,
变量:{
名称:state.value
}
})
。然后(响应=>{
const user_exists=response.data.userCount!==0;
log(`User已经存在:${User\u exists}`)
});
}
```

我不想取消请求,我希望在请求完成后发生一些事情(创建帐户或显示错误)。立即找到解决方法。