事件流
Provider 事件用于通知 DApp:用户是否切换了账户、网络是否变化、连接是否断开。应用应把这些事件视为状态来源,并在收到事件后更新页面。
看账户变化
用户在钱包内切换账户、断开授权或清空连接时,会触发 accountsChanged。
provider.on("accountsChanged", (accounts: string[]) => {
if (accounts.length === 0) {
console.log("用户已经断开钱包连接");
} else {
console.log("当前激活账户:", accounts[0]);
}
});
监听链变更
用户切换网络后会触发 chainChanged。如果页面中缓存了链 ID、合约地址或余额信息,建议在这里统一刷新。
provider.on("chainChanged", (chainId: string) => {
console.log("更新后的 Chain ID:", chainId);
window.location.reload();
});
监听连接/断开
connect 表示 Provider 已连接到某条链,disconnect 表示当前连接不可用。断开后请停止发送新的 RPC 请求,并提示用户重新连接。
provider.on("connect", (connectInfo) => {
console.log("连接结果:", connectInfo.chainId);
});
provider.on("disconnect", (error) => {
console.log("断开原因:", error.message);
});