Javascript Apollo useLazyQuery完成时监听
我正在使用Apollo的graphql作为注册页面。Javascript Apollo useLazyQuery完成时监听,javascript,reactjs,react-apollo,Javascript,Reactjs,React Apollo,我正在使用Apollo的graphql作为注册页面。 onSubmit我想发送一个查询以确认用户名是否唯一(目前正在统计用户,我知道我应该检查是否存在,但不包括此问题的范围) 我做那件事有几个问题。 使用useQuery立即发送查询-我无法选择在提交时发送查询。 使用useLazyQuery在调用user\u count时发送延迟查询。 ->问题:它既不是承诺,也不是完成的功能(存在于useQuery中并在查询完成后执行的函数) useLazyQuery是如何工作的?它执行查询。这些值可以通过d
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}`)
});
}
```
我不想取消请求,我希望在请求完成后发生一些事情(创建帐户或显示错误)。立即找到解决方法。