skip to Main Content

I have the below file and I am trying to call setAuthState however I can’t seem to figure out how to call this function from another file. This context file is content from a mix of online sources with my changes so I think it should work but I am unsure how to call it properly. Everything I find when searching SO and Google is calling the function from inside the context provider like I am already doing inside useEffect.

I tried importing it as below

screen.js

import useAuth from '../../context/useAuth'
const { setAuthState } = useAuth();

then using it as

setAuthState(credentials)

Files with the actual code

useAuth.js

import { useContext } from 'react';
import AuthContext from 'auth.js';

export default () => {
  const context = useContext(AuthContext);
  if (context === undefined) {
    throw new Error('Error message: <tbd>');
  }
  return context;
}

auth.js

import React, { createContext, useState, useEffect } from 'react';
import { globalStorage } from '../state/global'

const AuthContext = createContext();

const AuthProvider = ({ children }) => {
  const [auth, setAuth] = useState(null);

    const checkAuth = () => {
      try {
        // do stuff
      } catch(e) {
        console.error(e)
      }
    }

  const setAuthState = data => {
    try {
      // do stuff
      setAuth(data);
    } catch (err) {
      console.error(err);
    }
  };

  useEffect(() => {
    checkAuth();
  }, []);

  return (
    <AuthContext.Provider value={{ auth, setAuthState}}>
      {children}
    </AuthContext.Provider>
  );
};

export { AuthProvider };

export default AuthContext;

Edit ** code response to an answer

<NavigationContainer>
      <AppProvider>
          <AppNavigation></AppNavigation>
        <FlashMessage position="bottom" />
      </AppProvider>
</NavigationContainer>

2

Answers


  1. in App.js file or your startup file

    make sure you add the authProvider.

    <AuthProvider> 
      <OtherProviders>
        <YourScreens />
      </OtherProviders>
    </AuthProvider>
    
    Login or Signup to reply.
  2. // authContext.js
    let authContext = createContext({
      auth: null,
      setAuth(credentials) {},
    });
    
    // useAuthHook.js
    let useAuth = () => {
      let data = useContext(authContext);
      return data;
    };
    
    // App.js
    let { auth, setAuth} = useAuth()
    
    Login or Signup to reply.
Please signup or login to give your own answer.
Back To Top
Search