如何解决React Native:这是正常现象吗?
我不知道这是否是正常行为。我的意思是我希望它在文件app.js中仅调用一次。
所以我有一个app.js文件,console.log中只有一个没有useEffect的字符串,如果我使用useEffect,它会调用一次,然后console.log它会两次。这正常吗?
另一件事是我有一个上下文文件,我想在其中分配有关用户的一些信息。
因此,我也使用useEffect,如果我在其中放置console.log,则它将调用2或3次:
我希望我的意思很清楚?
这里是代码:
App.js
console.log("---App----")
export default function App() {
console.log("---App in---");
const [authState,setAuthState] = useState({
isAuthenticated: false,isLoadingComplete: false,});
useEffect(() => {
on_auth_state_changed((user) => {
setAuthState({
...authState,isAuthenticated: !!user,isAuthenticationReady: true,isLoadingComplete: true,})
});
},[])
}
UserContext.js
import React,{ useState,createContext,useContext,useEffect } from 'react';
import { FirebaseContext,FirebaseProvider } from './FirebaseContext';
const UserContext = createContext([{},() => { }])
let count = 0;
const UserProvider = (props) => {
const firebase = useContext(FirebaseContext);
const [state,setState] = useState({
profileImage: 'default',posts: 0,isLoggedIn: false
})
useEffect(() => {
// async function fetchData() {
firebase.onAuthStateChanged(async (user) => {
if (user) {
try {
const userInfo = await firebase.getCurrentUserProfile();
setState({
...userInfo,isLoggedIn: true
})
} catch (error) {
console.log("@UserContext onAuth",error.message);
}
} else {
setState({
...state,isLoggedIn: false
})
}
});
// }
// fetchData();
},[])
console.log("---------@UserContext-----------",count++)
return <UserContext.Provider value={[state,setState]}>{props.children}</UserContext.Provider>
}
export { UserContext,UserProvider };
因此,如果应用程序启动并显示登录屏幕,则这是输出。 所以我在这里期望一个“ App in”输出和一个“ UserContext”输出。 因此,只有一个来自不同文件的呼叫。
---App----
Running application on Android SDK built for x86.
---App in---
---App in---
---------@UserContext----------- 0
---------@UserContext----------- 1
登录后:
---App in---
---------@UserContext----------- 2
---------@UserContext----------- 3
注销后:
---App in---
---------@UserContext----------- 4
---------@UserContext----------- 5
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。