大佬教程收集整理的这篇文章主要介绍了useContext 错误:无效的钩子调用。 Hooks 只能在函数组件内部调用,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在尝试在 React Native Expo 应用程序中使用 Firebase 实现身份验证,但收到指向 useContext
的错误,我在我的 Routes.Js 文件中使用了该错误:
import React,{ useContext,useEffect,useState } from 'react';
import { NavigationContainer } from '@react-navigation/native';
import * as firebase from 'firebase';
import AuthStack from './AuthStack';
import MainTab from './MainTab';
import { AuthUserContext } from './AuthUserProvIDer';
import LoadingScreen from '../screens/LoadingScreen';
export default function Routes() {
const [isLoading,setIsLoading] = useState(true);
const { user,setUser } = useContext(AuthUserContext);
useEffect(() => {
const unsubscribeAuth = firebase.auth().onAuthStateChanged(async authUser => {
try {
await (authUser ? setUser(authUser) : setUser(null));
setIsLoading(false);
} catch (error) {
console.log(error);
}
});
return unsubscribeAuth;
},[]);
if (isLoading) {
return <LoadingScreen />;
}
return (
<NavigationContainer>
{user ? <MainTab /> : <AuthStack />}
</NavigationContainer>
);
}
我在单独的文件 AuthUserContext
中创建 AuthUserProvIDer.Js
:
import React,{ useState,createContext } from 'react';
export const AuthUserContext = createContext({});
export const AuthUserProvIDer = ({ children }) => {
const [user,setUser] = useState(null);
return (
<AuthUserContext.ProvIDer value={{ user,setUser }}>
{Children}
</AuthUserContext.ProvIDer>
);
};
然后我将其用作 App.Js 文件中的提供程序:
export default function AppWrapper() {
const [FontLoaded,setFontLoaded] = useState(false);
if (!FontLoaded) {
return (
<AppLoading
startAsync={fetchFonts}
onFinish={() => setFontLoaded(true)}
/>
);
}
const rootReducer = combineReducers({
cart: cartReducer,history: historyReducer
});
const store = createStore(rootReducer,applymIDdleware(ReduxThunk));
return (
<ProvIDer store={storE}>
<AuthUserProvIDer>
<Routes />
</AuthUserProvIDer>
</ProvIDer>
);
}
我几天来一直在寻找答案,但看不出这有什么问题。我使用 createContext
或 useContext
的方式有问题吗?任何有关可能解决方案的线索都会让我永远感激不尽!!
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)
以上是大佬教程为你收集整理的useContext 错误:无效的钩子调用。 Hooks 只能在函数组件内部调用全部内容,希望文章能够帮你解决useContext 错误:无效的钩子调用。 Hooks 只能在函数组件内部调用所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。