程序问答   发布时间:2022-05-31  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了useContext 错误:无效的钩子调用。 Hooks 只能在函数组件内部调用大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

如何解决useContext 错误:无效的钩子调用。 Hooks 只能在函数组件内部调用?

开发过程中遇到useContext 错误:无效的钩子调用。 Hooks 只能在函数组件内部调用的问题如何解决?下面主要结合日常开发的经验,给出你关于useContext 错误:无效的钩子调用。 Hooks 只能在函数组件内部调用的解决方法建议,希望对你解决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>
  );
}

我几天来一直在寻找答案,但看不出这有什么问题。我使用 createContextuseContext 的方式有问题吗?任何有关可能解决方案的线索都会让我永远感激不尽!!

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

大佬总结

以上是大佬教程为你收集整理的useContext 错误:无效的钩子调用。 Hooks 只能在函数组件内部调用全部内容,希望文章能够帮你解决useContext 错误:无效的钩子调用。 Hooks 只能在函数组件内部调用所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。