Metamask
Metamask API:無法檢測 React.js 中的“連接”和“斷開”事件
您好,我對開發很陌生。
我正在通過 React.js 測試與 Metamask 的通信
我設法成功收聽網路和帳戶更改,但是當我嘗試檢測是否有人從我的應用程序“連接”或“斷開連接”時,我無法接收到該事件。
我正在使用的 Metamask API 文件: https ://docs.metamask.io/guide/ethereum-provider.html#connect
在職的:
ethereum.on('accountsChanged', handler: (accounts: Array<string>) => void);
ethereum.on('chainChanged', handler: (chainId: string) => void);
'
不工作:
ethereum.on('connect', handler: (connectInfo: ConnectInfo) => void);
ethereum.on('disconnect', handler: (error: ProviderRpcError) => void);
以下程式碼在我的 React.js 應用程序中完美執行(使用 React.Component)
async checkAccountChange() { const ethereum = window.ethereum if (ethereum) { // Listening to Event ethereum.on('accountsChanged', accounts => { console.log(accounts[0]) this.setState({ account: accounts[0] }) }) }
}
另一方面,以下程式碼沒有給我任何控制台輸出
async checkMetamaskHasConnected() { if (window.ethereum) { window.ethereum.on('connect', () => { console.log("Metamask connected") this.setState({ metamaskHasConnected: true }) }) }
}
async checkMetamaskHasDisconnected() { const ethereum = window.ethereum if (ethereum) { // Listening to Event ethereum.on('disconnect', () => { console.log("MetaMask discconnected") this.setState({ metamaskHasDisonnected: true }) }) }
}
考慮到我是一個非常新鮮的初學者,只是邊做邊學
如果您的要求是:
檢測是否有人從我的應用程序“連接”或“斷開連接”
您嘗試的連接和斷開連接方法可能無濟於事,因為它們旨在了解您與區塊鏈的連接是否可用(例如,當使用者已經連接嘗試啟動事務但 RPC 連接已關閉時)。
也許這篇文章可以幫助你。通過 和 的組合,
getAccounts()
您currentProvider
可以推斷使用者是否已連接。否則,如果這只是為了了解使用者是否連接到您的網站,您可以使用 WebSockets(取決於您的架構)。
先生您好,您可以等待斷開連接時觸發事件(使用者從 Dapp 刪除 Metamask 中的連接),然後使用新地址發送操作如果目前有任何其他帳戶連接到 Dapp,否則您可以呼叫斷開功能
const provider = await new web3(web3.givenProvider); provider.on('accountsChanged', (code: number, reason: string)=> { const accountSwitch = code[0]; if (accountSwitch){ if (accountSwitch) { dispatch({ type: _const.ADDRESS, payload: { address: accountSwitch } }) } }else{ DisconnectFromWallet(); } });