4

私は nextjs + reactjs + typescript を使用しています。タイプスクリプトがなくても完全に機能しますが、タイプスクリプトを使用しているときにこのエラーが発生しました。ところで、私はuseMemoここで使用していますが、関数の外で初期化しようとしました。どちらの場合も、同じエラーが発生しました。

ここに私が現在使用しているコードスニペットがあります

const INFURA_ID = process.env.REACT_APP_INFURA_ID;

const initWeb3 = (provider: any) => {
  const web3 = new Web3(provider);

  web3.eth.extend({
    methods: [
      {
        name: "chainId",
        call: "eth_chainId",
        outputFormatter: web3.utils.hexToNumber as any,
      },
    ],
  });

  return web3;
};

export function Web3UtilityProvider() {
  const [walletAddress, setWalletAddress] = useState(null);
  const { user, authDispatch } = useAuth();

  const dAppClient = useMemo(() => new DAppClient({ name: "Beacon Docs" }), []);

  const web3Modal = useMemo(() => {
    return new Web3Modal({
      // network: "mainnet", // optional
      cacheProvider: true, // optional
      providerOptions: {
        walletconnect: {
          package: WalletConnectProvider, // required
          options: {
            infuraId: INFURA_ID,
          },
        },
        // torus: {
        //   package: Torus,
        // },
        fortmatic: {
          package: Fortmatic,
          options: {
            key: process.env.REACT_APP_FORTMATIC_KEY,
          },
        },
        authereum: {
          package: Authereum,
        },
        bitski: {
          package: Bitski,
          options: {
            clientId: process.env.REACT_APP_BITSKI_CLIENT_ID,
            callbackUrl:
              window.location.href + "bitski-callback.html",
          },
        },
      },
    });
  }, []);

  const logoutOfWeb3Modal = useCallback(async () => {
    async () => {
      web3Modal.clearCachedProvider();
      setTimeout(() => {
        typeof window !== "undefined" && window.location.reload();
      }, 1);
    };
  }, [web3Modal]);

  const loadWeb3Modal = useCallback(async () => {
    const provider = await web3Modal.connect();

    if (!provider?.on) {
      return;
    }

    const web3 = initWeb3(provider);

    const accounts = await web3.eth.getAccounts();

    provider.on("close", () => {
      logoutOfWeb3Modal();
    });

    provider.on("accountsChanged", async (accounts: any) => {
      console.log("accountsChanged", accounts);
      if (!accounts || !accounts.length) {
        return;
      }
    });
  }, []);

  return (
    <Web3Context.Provider
      value={{
       logoutOfWeb3Modal,
       loadWeb3Modal
      }}
    >
      {children}
    </Web3Context.Provider>
  );
}

エラーpng

4

1 に答える 1