【发布时间】:2022-01-13 14:34:27
【问题描述】:
我目前正在 React Native 中开发一个应用程序,我决定使用 Graphql 和 Apollo。 我的登录/注销组件有问题。我选择这样做:
- 谷歌登录 btn 触发了一个在谷歌数据库中获取用户数据的函数
- 然后当我得到结果时,我使用 google_id 检查我的数据库中是否已经有用户注册,如果有,我“导航”到另一个屏幕,如果没有,我创建一个用户,保存它,然后我导航。
- 如果用户想注销,只需点击注销按钮即可。
我的问题是,当我尝试在同一个博览会会话中多次登录/注销时,有时查询不会重新获取并且我卡在加载页面上。
我尝试使用 useQuery 中的 skip 属性解决此问题 => 当 google 的数据到来时,我发送了一个 LoggedInWithGoogle 操作,它是一个布尔值,我将它用于跳过值。 然后我尝试了lazyQuery,并在一个 useEffect 挂钩中使用了它,该挂钩在 signInWithGoogle 值更改时触发。 我使用了一些 console.log 来检查是否调用了 getUser() 函数,从我看到的情况来看,但没有调用 onComplete 方法,所以我真的不知道这里有什么问题,如果有人可以帮忙?
useEffect(() => {
if (response?.type === 'success') {
console.log('response successful')
WebBrowser.maybeCompleteAuthSession();
const { authentication } = response;
dispatch(loggedInWithGoogle(true));
let accessToken: string | undefined = authentication?.accessToken;
getUserInfos(accessToken);
}
return function cleanup() {
setIsMounted(false);
}
}, [response]);
const [getUser, { called, loading, data }] = useLazyQuery(
GET_USER,
{
variables: { google_id: user.google_id },
onCompleted: () => {
console.log('request completed', data)
handleData(data);
}
}
);
useEffect(() => {
if(googleLogged) {
console.log('fetching', called)
getUser();
console.log('fetched')
}
}, [googleLogged])
【问题讨论】:
标签: react-native authentication expo hook apollo