reactjs - firebase.auth().onAuthStateChanged() 在本机反应中返回未定义
问题描述
我试图在刷新应用程序并之前登录但firebase.auth().onAuthStateChanged()
未定义后获取身份验证状态。这背后的动机是通过使用身份验证状态导航到主屏幕或登录屏幕。
import React, {Component} from 'react';
import {View} from 'react-native';
import firebase from 'firebase';
import {connect} from 'react-redux';
import {Spinner} from '../components/common';
class Switch extends Component {
componentDidMount() {
const userData = this.checkUser();
this.switchContent(userData);
}
checkUser = () => {
firebase.auth().onAuthStateChanged(async (userData) => {
return userData;
});
};
switchContent(userData) {
console.log(userData);
if (userData) {
return this.props.persistantSignIn();
}
return this.props.navigation.push('SignInForm');
}
renderComponent() {
return (
<View style={{flex: 1}}>
<Spinner />
</View>
}
render() {
return <View style={{flex:1}}>{this.renderComponent()}</View>;
}
}
export default connect(null, {persistantSignIn})(Switch);
解决方案
onAuthStateChanged
(ie )的结果userData
应该在匿名函数中处理。另请注意,在用户登录之前,userData
将是null
.
componentDidMount() {
firebase.auth().onAuthStateChanged( (userData) => {
this.switchContent(userData);
});
}
没有必要firebase.auth().onAuthStateChanged
在匿名函数中进行包装,除非,例如,您要使用useEffect
,如下所示:
import { useEffect } from 'react';
...
useEffect(() => {
auth.onAuthStateChanged( userData => {
this.switchContent(userData);
})
},[])
推荐阅读
- c++ - 浅拷贝不崩溃
- python - 关于使用 O360 库访问文件:客户端错误:403 客户端错误:url 被禁止
- ignite - 使用DML插入数据后按分区索引扫描查询数据失败
- r - ggplot2 中的图例和图形颜色不匹配
- spring - 将 OncePerRequestFilter 应用于 Spring Boot 执行器
- xcode - 警告:appId 已设置,但请调用 setLaunchOptions(launchOptions) 完成 OneSignal 初始化
- python - Python缩短了多个相似的for循环
- java - 在规则头部处理存在变量
- c++ - unordered_map 中桶的实现
- python - 如何在 tkinter 中的按钮之间添加空格?