我有两个屏幕..首先是闪屏,在这里我借助firebase.auth()检查用户是否已经存在。onAuthStateChanged侦听器。如果用户为空,它将转到另一个firebase.auth()的登录屏幕。onAuthStateChanged侦听器用于在电话验证后获取用户,如果用户之前未注册,则将用户移至UserDetails屏幕以获取更多用户信息,或者移至主屏幕..同样的检查也在闪屏上进行,以确保只有在用户输入了他的详细信息后才在主屏幕上显示..问题是,在登录屏幕上,电话验证完成后,firebase.auth()检测到用户登录,启动屏幕的监听器也会被执行,有时会导致致命的崩溃..
那么,我应该如何正确删除登录屏幕上的监听器?我的方式不能正常工作。
时间延迟用于动画显示在初始屏幕上
以下是启动屏幕上的代码:
try{
if(!firebase.apps.length){
firebase.initializeApp(firebaseConfig);
}
}catch(err){
console.log(err);
}
const cacheResourcesAsync = async () => {
//Images to be loaded
];
const cacheImages = images.map(image => {
return Asset.fromModule(image).downloadAsync();
});
return Promise.all(cacheImages);
}
export const SplashLoadingScreen = () => {
const [isReady, setIsReady] = useState(false);
const [isFire, setIsFire] = useState(false);
const [isFont, setIsFont] = useState(false);
const [isImages, setIsImages] = useState(false);
const navigation = useNavigation();
var unsubscribe;
//Loading Fonts
const [michromaLoaded] = useMichroma({ Michroma_400Regular });
const [latoLoaded] = useLato({ Lato_700Bold });
//Checking if the fonts are ready
useEffect(() => {
if(michromaLoaded && latoLoaded){
setIsFont(true);
}
}, [michromaLoaded, latoLoaded]);
//Checking if the Images are loaded or not
useEffect(() => {
cacheResourcesAsync();
setIsImages(true);
return () => unsubscribe = undefined;
}, []);
//Checking if Firebase is fired up
useEffect(() => {
if(firebase.apps.length !== 0){
setIsFire(true);
}
}, [firebase.apps.length]);
//Last Check before moving to other screen
useEffect(() => {
if(isFont && isImages && isFire){
setTimeout(() => {
setIsReady(true); // Animation Purpose
}, 5000);
}
}, [isFont, isImages, isFire]);
//Moving to other screens
useEffect(() => {
if(isReady){
unsubscribe = firebase.auth().onAuthStateChanged((user) => {
if (user) {
firebase.firestore().collection("User Details").doc(firebase.auth().currentUser.uid).get().then((snap) => {
if(snap.exists){
navigation.navigate('Tab');
console.log("Splash"); //Used to check if the listener is still working on login screen
}else {
navigation.navigate('User');
console.log("Splash");
}
});
return;
}
navigation.navigate("SignUp");
});
}
}, [isReady]);
SplashScreen.hideAsync();
如何正确删除登录屏幕上的侦听器
<code>onAuthStateChanged()
既然你知道
unsubscribe = firebase.auth().onAuthStateChanged((user) => {...});
您只需调用< code>unsubscribe()来“删除侦听器”。见括号,因为它是一个函数。
所以,如果我正确理解了你的情况,你应该在navigation.navigate(...)
调用之前调用它。
问题内容: 一个典型的Redis聊天示例将如下所示(仅举一个这样的示例,请参见https://github.com/emrahayanoglu/Socket.io- Redis-RealTime-Chat- Example/blob/master/chatServer.js ): 但是,这里的问题是,当“断开连接”时,侦听器仍然处于连接状态。控制台将继续打印出。如果要检查的事件列表,他们仍然会发现
我有一个表,其中有多个表项可用。其中,对于某些表项,设置了背景和前景色。 在选择彩色项目时,由于文本颜色为白色,文本很难阅读,因此,我需要将前面的颜色更改为默认颜色,即黑色。我是用选择侦听器完成的 成功地改变了颜色。 但是现在我正在选择任何其他没有着色的项目,所以我想删除上面的选择侦听器并将文本颜色设置为彩色即白色。我不知道如何使用。 有人能帮忙吗?
问题内容: 我当时在上网,但找不到很好的信息。我试图在每次运行应用程序时检测按键。我正在使用JavaFX并将其与FXML一起运行。我尝试了很多事情,但没有任何效果。请帮我。 问题答案: 您应该签出Ensemble示例。这是关键的侦听器代码。
我正在使用Realex Payments的HPP API开发一个卡支付页面,其中包含一个iFrame,用于托管Realex页面。在Realex请求表单上,我将字段HPP_POST_维度和HPP_POST_响应设置为我的URL,如下所示: 付款页: www.example.com/account/payment.html 隐藏字段值用于在HPP页面大小更改和事务完成时,使用事件侦听器将数据从Real
虽然计算属性在大多数情况下更合适,但有时也需要一个自定义的侦听器。这就是为什么 Vue 通过watch选项提供了一个更通用的方法,来响应数据的变化。当需要在数据变化时执行异步或开销较大的操作时,这个方式是最有用的。例如: <div id="watch-example"> <p> Ask a yes/no question: <input v-model="question">
1. 前言 本节介绍侦听器 watch 的使用方法。包括什么是侦听器,侦听器的特点,以及如何对不同类型的数据进行监听。其中重点掌握对不同类型的数据如何使用侦听器,了解它之后,在才能在之后的日常开发中熟练运用。 2. 慕课解释 Vue 提供了一种更通用的方式来观察和响应 Vue 实例上的数据变动:侦听属性。 — 官方定义 侦听器 watch 是 Vue 提供的一种用来观察和响应 Vue 实例上的数据