IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 网络协议 -> VUE刷新后websocket/walletconnect事件失效 -> 正文阅读

[网络协议]VUE刷新后websocket/walletconnect事件失效

原因就是页面刷新后页面数据都会重建导致的,数据重建那么你的对象都是一个全新的对象,如果此时websocket服务器或walletconnect钱包断开链接,回调会调用之前那个对象的事件。从而导致页面中的事件失效

以walletconnect为例子:

import Web3 from "web3"
import WalletConnectProvider from "@walletconnect/web3-provider"
import * as api from '@/api/auth.js';
import * as userAPI from '@/api/user.js';

import {
	SetItem,
	RemoveItem
} from '@/utils/auth';
const InfuraId = "774b1e4252de48c3997d66ac5f5078d8";
export default {
	provider: null,
	web3: null,
	//显示二维码
	async showQrcode() {
		if (typeof WalletConnectProvider === 'undefined') {
			return;
		}
		this.provider = new WalletConnectProvider({
			infuraId: InfuraId,
		});
		//获取钱包链接
		this.connect(this.provider);
	},
	async connect(provider){
		this.provider = provider;
		let that = this;
		await provider.enable().then(res => {
			//封装web3对象
			that.web3 = new Web3(provider);
			//初始化事件
			that.init(provider)
			//登录
			that.login(res[0]);
		}).catch(err => {
			console.log(err)
		})
	},
	async login(walletAddress) {
		api.walletLogin({
			"walletAddress": walletAddress
		}).then(res => {
			//获取token
			SetItem("V-Token", res.data);
			//获取用户信息
			userAPI.info().then(res => {
				SetItem("loginUser", res.data);
			})
		});
	},
	/**
	 * 链接建立成功
	 */
	async init(provider) {
		console.log("初始化")
		provider.on("accountsChanged", (accounts) => {
			console.log("accounts", accounts)
			provider.close() //关闭二维码
		})
		provider.on("chainChanged", (chainId) => {
			console.log("chainId", chainId)
		})
		provider.on("networkChanged", (networkId) => {
			console.log("networkId", networkId)
		})
		provider.on("disconnect", (code, reason) => {
			console.log("disconnect", code, reason)
			RemoveItem("V-Token");
			RemoveItem("loginUser");
		})
	},
	async getAccounts() {
		//  Get Accounts 获取帐户
		return await this.web3.eth.getAccounts()
		// console.log(accounts)
		// //  Get Chain Id 获取链 ID
		// const chainId = await web3.eth.getChainId()
		// console.log(chainId)
		// //  Get Network Id 获取网络 ID
		// const networkId = await web3.eth.net.getId()
		// console.log(networkId)
		// // Send Transaction 发送交易
		// const txHash = await web3.eth.sendTransaction()
		// console.log(txHash)
		// // Sign Transaction 签署交易
		// const signedTx = await web3.eth.signTransaction()
		// console.log(signedTx)
		// // Sign Message 签名留言
		// const signedMessage = await web3.eth.sign()
		// console.log(signedMessage)
		// // Sign Typed Data 签署类型的数据
		// const signedTypedData = await web3.eth.signTypedData()
		// console.log(signedTypedData)
		// // Send JSON RPC requests 发送JSON RPC请求
		// const result = await provider.request()
		// console.log(result)
	}

}

上述代码通过一个showQrcode创建与walletconnect的链接并监听此链接的状态,websocket类似。

页面刷新后如果钱包端断开链接,事件就会不执行。websocket类似。

那么只需要在app.vue重建链接即可,websocket类似。

<template>
	<div id="app">
		<div id="nav">
			<router-view />
		</div>
	</div>
</template>

<script>
	export default {
		components: {},
		data() {
			return {}
		},
		created() {
			console.log("页面刷新")
			//如果缓存中链接存在 就每次刷新页面重新建立链接
			if(this.$GetItem("walletconnect")){
				this.$web3.showQrcode();
			}
		}
	}
</script>

就可以解决,虽然解决很简单,重要的是思路,小改变解决大麻烦

  网络协议 最新文章
使用Easyswoole 搭建简单的Websoket服务
常见的数据通信方式有哪些?
Openssl 1024bit RSA算法---公私钥获取和处
HTTPS协议的密钥交换流程
《小白WEB安全入门》03. 漏洞篇
HttpRunner4.x 安装与使用
2021-07-04
手写RPC学习笔记
K8S高可用版本部署
mySQL计算IP地址范围
上一篇文章      下一篇文章      查看所有文章
加:2022-04-04 12:47:24  更:2022-04-04 12:47:39 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 4:51:40-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码