【发布时间】:2020-09-10 19:47:58
【问题描述】:
React Native 应用程序在关闭并重新打开时发出警告:无法对未安装的组件执行 React 状态更新。似乎是我的条件渲染导致了这种情况,如果我删除了启动画面部分,那就没问题了。
renderScreens() 在渲染堆栈之前建立 Firebase 连接时的初始屏幕。这可行,但我不断收到警告,要求清理 useEffect 函数。
if (auth.initializing) {
return <RootStack.Screen name={'Splash'} component={SplashScreen} />;
}
return auth.user && !auth.loading ? (
<RootStack.Screen name={'MainStack'} component={MainStackNavigator} />
) : (
<RootStack.Screen name={'AuthStack'} component={AuthStackNavigator} />
);
在我的身份验证钩子中
const [initializing, setInitializing] = useState<boolean>(true);
const [user, setUser] = useState<FirebaseAuthTypes.User | null>(null);
useEffect(() => {
auth().onAuthStateChanged(userState => {
setUser(userState);
if (initializing) setInitializing(false);
});
}, []);
尝试使用unmount 技巧但没有帮助。下面是 react-native-firebase 的示例
// Handle user state changes
function onAuthStateChanged(user) {
setUser(user);
if (initializing) setInitializing(false);
}
useEffect(() => {
const subscriber = auth().onAuthStateChanged(onAuthStateChanged);
return subscriber; // unsubscribe on unmount
}, []);
在应用程序打开时,获取 auth.user 对象时总是会有短暂的延迟,如果删除了初始屏幕,那么让经过身份验证的用户看到身份验证屏幕然后在加载用户对象后立即更改为 main 是很奇怪的应用程序。我怎样才能正确处理这个问题而不引起警告。
【问题讨论】:
标签: reactjs react-native firebase-authentication react-hooks