如何通过 Web3-react 保持 MetaMask 与 UI 的连接持久?

2024-05-11

我正在使用 web3-react,但我不知道如何在浏览器刷新时保持与 MetaMask 钱包的连接持续。

这是代码:

// define the injectedConnectors

const injectedConnector = new InjectedConnector({
  supportedChainIds: [
    1, // Mainet
    3, // Ropsten
    4, // Rinkeby
    5, // Goerli
    42, // Kovan
  ],
})

const { chainId, account, activate, active } = useWeb3React()
// activate the wallet
activate(injectedConnector)
console.log(account)
// all good. 

到目前为止,一切正常,我激活了我的 MetaMask 钱包,并且正确记录了帐户,并且 active 变量是一个布尔值,会更改为 true。

问题是,当我刷新页面时,活动变为 false,并且我失去了 UI 与 MetaMask 钱包之间的连接。当然,将活动保存到浏览器中不会改变任何内容,因为连接依赖于活动布尔值。

该文档缺乏此类信息。


终于找到解决办法了! 我试图使用官方库中的示例使用...但由于某种原因它无法工作,但没有出现错误。 然后我偶然发现了一些有同样问题的人并在 Reddit 上发帖,并得到了一个对我有用的好答案。 这是该帖子的链接:https://www.reddit.com/r/ethdev/comments/nw7iyv/displaying_connected_wallet_after_browser_refresh/h5uxl88/?context=3 https://www.reddit.com/r/ethdev/comments/nw7iyv/displaying_connected_wallet_after_browser_refresh/h5uxl88/?context=3这是该帖子中的代码:

首先创建一个保存注入连接器的文件,名为connectors.js:

import { InjectedConnector } from '@web3-react/injected-connector'
export const Injected = new InjectedConnector({ supportedNetworks: [1, 3, 4, 5, 42] })

然后创建一个组件来检查用户是否已经激活了钱包:

import React, { useEffect, useState } from 'react'
import { injected } from '../connectors'
import { useWeb3React } from '@web3-react/core'

function MetamaskProvider({ children }) {
  const { active: networkActive, error: networkError, activate: activateNetwork } = useWeb3React()
  const [loaded, setLoaded] = useState(false)
  useEffect(() => {
    injected
      .isAuthorized()
      .then((isAuthorized) => {
        setLoaded(true)
        if (isAuthorized && !networkActive && !networkError) {
          activateNetwork(injected)
        }
      })
      .catch(() => {
        setLoaded(true)
      })
  }, [activateNetwork, networkActive, networkError])
  if (loaded) {
    return children
  }
  return <>Loading</>
}

export default MetamaskProvider

并将 MetamaskProvider 包装在您希望钱包在刷新时激活的组件周围:

 return (
    <ThemeProvider theme={darkMode ? darkTheme : lightTheme}>
      <StylesProvider injectFirst>
        <Paper>
          <Router>
            <Web3ReactProvider getLibrary={getLibrary}>
              <MetamaskProvider>
              {...children components}
              </MetamaskProvider>
            </Web3ReactProvider>
          </Router>
        </Paper>
      </StylesProvider>
    </ThemeProvider>
  );
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何通过 Web3-react 保持 MetaMask 与 UI 的连接持久? 的相关文章

随机推荐

  • iPhone 表格部分页眉和页脚中的文本

    我有一个关于在表视图部分的页眉和页脚中打印文本的问题 我想在每行的页脚中显示一些文本 但这样做时遇到问题 当我开始下一部分时 它从第一个部分的下面开始绘制 要了解我到底需要什么 请转到 设置 gt 常规 gt 网络 在此屏幕中 我们有多个部
  • WCF 回调:它可以与 Java 互操作吗?

    目前 我以 正常 方式实现所有 Web 服务 也就是说 我在 Eclipse 中创建一个 WSDL 文件 然后使用 WSCF blue 一个 Visual Studio 扩展 自动生成必要的代码 它是回复 请求 不过 我希望改用回调 这样我
  • 将 Flutter 前端与适用于 Android 和 iOS 的 .NET Core 后端相结合

    目前在一家使用 NET 不是 Core 的公司工作 但希望切换到 NET Core 并想通过创建一个具有 Flutter io 前端和 NET Core 后端的应用程序来实现这一目标 带后端的应用程序只是为了了解 NET Core 的功能
  • 如何在Windows上用C语言实现定时器

    如何在 C 中创建一个计时器 时间到期后 我应该能够调用回调函数 平台是windows 有人可以指导我吗 问候 米敦 看一眼SetTimer http msdn microsoft com en us library ms644906 28
  • 您可以从 J2ME 访问 SIM 卡联系人吗?

    您好 我正在开发一个移动应用程序 我需要访问用户的电话簿 SIM 卡和电话联系人 这可能吗 取决于手机 有些只允许您访问手机联系人 有些则同时允许您访问电话和 SIM 卡 确保迭代所有PIMList由以下供应商提供PIM listPIMLi
  • Google People API 是否支持查询功能

    google people api支持查询功能吗 目前 较旧的 api contact google api 允许您使用查询参数 q 进行简单的文本搜索 想知道 people api 是否支持这个 谢谢 德里克 Google People
  • 如何在调试模式下更新 Visual Studio Code 使用的 ptvsd

    VS Code 继续使用 vscode extensions ms python python 2020 3 69010 pythonFiles ptvsd launcher py 而我需要 5 0 来使用它的某些功能 您可以关注https
  • TypeScript 界面不会在 VS Code 悬停小部件或 ctrl-k-i 上显示其属性

    当我在 VS Code 中创建任何界面时 界面内没有任何方法的预览 当我使用类型声明时 它会按预期工作 interface SomeInterface someMethod string let test SomeInterface 我了解
  • GCC:数组类型具有不完整的元素类型

    我已经宣布了struct 我尝试传递这些结构的数组 以及double双精度数组和一个整数 到一个函数中 我得到一个 数组类型具有不完整的元素类型 当我编译它时来自 gcc 的消息 我在通过考试的过程中犯了什么错误struct到函数 type
  • SQL Server RODBC 连接

    有没有人有使用 RODBC 并连接到 MS SQL Server 2005 或 2008 的连接字符串示例 谢谢 library RODBC dbhandle lt odbcDriverConnect driver SQL Server s
  • node.js 发送 css 文件

    我正在尝试让 node js 服务器发送 css 文件 我在这里修改这个服务器 http github com LearnBoost Socket IO node blob master test server js http github
  • 有没有办法在 JetBrains IDE 之间同步设置?

    同步相似设置的最佳方式是什么捷脑公司 http www jetbrains com IDE 例如我有PyCharm http www jetbrains com pycharm and PhpStorm http www jetbrains
  • 如何将 HTML 代码转换为 Confluence 风格的 Wiki 标记?

    Mylyn Wikitext 的 API 文档具有将 Wiki 标记转换为 HTML 的函数 但我找不到将 HTML 代码转换 解析为 Wiki 标记的函数 班级MarkupParser有方法parseToHTML 但是我在哪里可以找到相反
  • 在 React Native 中删除输入文本中的下划线

    我无法删除输入文本中的下划线 我想应该是 underlineColorAndroid transparent 查看相关问题https github com facebook react native issues 10108 https g
  • 如何获取 HKWorkoutActivityType 的字符串描述?

    我正在开发一项功能 可以从健康应用程序中读取 HKWorkout 样本 我想向用户显示一个描述字符串 告诉他们锻炼是什么 我能看到的唯一可能向用户指示样本代表的活动类型的属性是workoutActivityType财产 我应该如何将 HKW
  • 在一个 SwiftUI 视图中相同的 ForEach 循环两次

    当我在视图中对数组使用 ForEach 循环两次时 我在运行时收到以下警告 LazyVGridLayout the ID 84308994 9D16 48D2 975E DC40C5F9EFFF is used by multiple ch
  • JavaScript 用空格分割字符串

    我想分割一个字符串 但我想保留空白 例如 var str my car is red var stringArray stringArray 0 my stringArray 1 stringArray 2 car stringArray
  • 如何在 #after_build 中隐藏 CCK Nodereference 输入小部件?

    我喜欢简化节点形式 我过去的技巧之一是 当我想要强制执行某种默认设置时 有条件地在新节点创建时隐藏 CCK 元素 我最喜欢的技巧之一就是快速清除由预填充 http drupal org project prepopulate模块 对我来说不
  • 使用 Python 在 OpenOffice/Microsoft Word 中格式化输出

    我正在开发一个需要格式化 可编辑输出的项目 Python 由于最终用户不会精通技术 因此输出需要采用文字处理器可编辑的格式 格式很复杂 要点 段落 粗体等 有没有办法使用Python生成这样的报告 我觉得应该有一种方法可以使用 Micros
  • 如何通过 Web3-react 保持 MetaMask 与 UI 的连接持久?

    我正在使用 web3 react 但我不知道如何在浏览器刷新时保持与 MetaMask 钱包的连接持续 这是代码 define the injectedConnectors const injectedConnector new Injec