'Uncaught TypeError: Cannot destructure property 'connectWallet' of 'useContext(...)' as it is undefined at Welcome (Welcome.jsx)

i'm trying to do a webpage for my Blockchain project and run into JS Mastery youtube web3 tutorial and i'm following it. I was creating the connect wallet button but I encountered some trouble in importing it from my context. Below the code:

//inside my prenotationContext.jsx
const PrenotationContext = React.createContext();
export default PrenotationContext;
export const PrenotationProvider = ({children}) => {
    const [currentAccount, setCurrentAccount] = useState("");
    const [formData, setFormData] = useState({addressTo: "", amount:"", keyword:"", description:"" });
    const [isLoading, setIsLoading] = useState(false);
     ...
    const connectWallet = async () => {
        try {
          if (!ethereum) return alert("Please install MetaMask.");
    
          const accounts = await ethereum.request({ method: 'eth_requestAccounts', });
          console.log(accounts)
          setCurrentAccount(accounts[0]);
          window.location.reload();
        } catch (error) {
            console.log(error);
            throw new Error("No ethereum object");
        }
    };
    ...
    return (
        <PrenotationContext.Provider 
        value={{
            connectWallet,
            currentAccount,
            formData, 
            sendPrenotation, 
            handleChange,}}>
                {children}
        </PrenotationContext.Provider>
    );
}
//inside my welcome.jsx
import  PrenotationContext  from '../context/PrenotationContext.jsx';
...
const Welcome = () => {
    // Transfering data from context/PrenotationContext to components
    const {connectWallet,currentAccount, formData, sendPrenotation, handleChange} = useContext(PrenotationContext);
    ...

The error is the following: Uncaught TypeError: Cannot destructure property 'connectWallet' of 'useContext(...)' as it is undefined at Welcome (Welcome.jsx:25:12)

Btw i'm not a front-end developer and that's my first time using JS and React, so it's not easy for me to find the errors



Solution 1:[1]

If you want to call context you should wrapp your component by contextProvider.

const App = () => {
  return (
    <PrenotationProvider>
    // some other components
      <Welcome />
    // some other components
    </PrenotationProvider>
  );
};

Put a provider at the high level of application, then you will get all data inside any components

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1 Egor