I see you’re getting an error related to the Web3Provider
component. I’ll help you fix it.
The issue is that the Web3Provider
component expects a provider
object to be passed as a prop, but in your code, you’re trying to access it directly from the contractABI
and contractAddress
.
Here’s an updated version of your code with the necessary changes:
import React, { useEffect, useState } from "react";
import { ethers } from 'ethers';
import { contract ABI, contractAddress } from '../utils/constants';
const Ethereum = () => {
const [accounts, setAccounts] = useState([]);
useEffect(() => {
// Set the provider and get the accounts
const provider = new ethers.providers.Web3Provider(window.ethereum);
const accountsList = await provider.get signedAccounts();
setAccounts(accountsList);
// If there are no accounts found, try to connect to the Ethereum network manually
if (accounts.length === 0) {
console.log("No accounts were found.");
}
}, []);
return (
Ethereum
![Ethereum: TypeError: Cannot read properties of undefined (reading 'Web3Provider')](https://erdemanaokuluyalova.com/wp-content/uploads/2025/02/fe9f476c.png)
{/ Your React app content here /}
);
};
export default Ethereum;
In this updated version, I’ve added a useState
hook to store the list of accounts. When the component mounts, it attempts to connect to the Ethereum network using the provider and gets the signed accounts. If no accounts are found, it logs a message.
The main difference is that we’re now passing the provider
object as a prop to the Ethereum
component, instead of trying to access it directly from the contractABI
and contractAddress
.
Make sure to install ethers.js
by running npm install ethers
or yarn add ethers
in your project directory.