I'm getting an error about not having a default export

Viewed 55

I'm trying to import Authprovider but i'm getting an error that it wasn't exported properly. Here is what i have so far. I've updated the firebase to version 9. So that should be good, i also checked my exports and they looked correct. I've tried using other stackoverflow examples before posting.

Compiled with problems:X

ERROR in ./src/components/App.jsx 18:30-42

export 'default' (imported as 'AuthProvider') was not found in '../components/contexts/AuthContext' (possible exports: AuthProvider, useAuth)

import "./App.css";
import Navbar from "../components/navbar/Navbar";
import { BrowserRouter as Routes, Route } from "react-router-dom";
import React from "react";
import Home from "./Home";
import Services from "./pages/Services";
import Products from "./products/Games";
import SignUp from "../components/user/SignUp";
import LogIn from "../components/user/LogIn";
import Snake from "./products/snakegame/Snake";
import AuthProvider from "../components/contexts/AuthContext";

function App() {
  return (
    <AuthProvider>
      <Navbar />
      <Routes>
        <Route path="/" element={<Home to="/" />}></Route>
        <Route path="/services" element={<Services />}></Route>
        <Route path="/signup" element={<SignUp />}></Route>
        <Route path="/products" element={<Products />}></Route>
        <Route path="/signUp" element={<SignUp />}></Route>
        <Route path="/logIn" element={<LogIn />}></Route>
        <Route path="/snake" element={<Snake />}></Route>
      </Routes>
    </AuthProvider>
  );
}
export default App;

I added the closing AuthProvider tag here, to my app.jsx file.

This is my AuthContext.js file. I'm exporting the two functions.

import React, { useContext, useState, useEffect } from "react";
import { auth } from "../../firebase";

const AuthContext = React.createContext;

function useAuth() {
  return useContext(AuthContext);
}

function AuthProvider({ children }) {
  const [currentUser, setCurrentUser] = useState();

  function signUp(email, password) {
    auth.createUserWithEmailAndPassword(email, password);
  }

  useEffect(() => {
    const unsubscribe = auth.onAuthStateChanged((user) => {
      setCurrentUser(user);
    });
    return unsubscribe;
  }, []);
  const value = {
    currentUser,
    signUp,
  };
  return <AuthContext.Provider value={value}>{children}</AuthContext.Provider>;
}

export { useAuth, AuthProvider };
5 Answers
Question :: export 'default' (imported as 'AuthProvider') was not found in 
           '../components/contexts/AuthContext' (possible exports: AuthProvider, 
           useAuth)
      
Answer :: The possible solution for this.
    
    Import AuthProvider by the destructuring method.
    
    import { AuthProvider } from "../components/contexts/AuthContext"; 

Since you are exporting AuthProvider in an object, you will need to import it using destructuring.

// AuthContext.js

export { useAuth, AuthProvider };  <-- exported in an object.

You need to import AuthProvider using destructuring.

// App.js

import { AuthProvider } from "../components/contexts/AuthContext"; <-- update this line to import using object destructuring.

You need to import like this...

import { AuthProvider } from "../components/contexts/AuthContext";

If you export as a default like this

export default function AuthProvider({ children }){

...

}

or

function AuthProvider({ children }){

...

}

export default AuthProvider

then only you can import like this

import AuthProvider from "../components/contexts/AuthContext";

Otherwise, you have to import objects from that export by destructuring like this

import { AuthProvider } from "../components/contexts/AuthContext"; 

You specifically exported AuthProvider and useAuth instead of exporting a default object. We can import those through couple of ways,

import * as auth from ‘ ../components/contexts/AuthContext’;

You can access the objects like auth.AuthProvider

Or

import { useAuth, AuthProvider } from ‘../components/contexts/AuthContext’;
Related