如何解决为什么 React 在触发事件时会触发 console.logs 8 次?
我是 React 的新手,我不明白为什么我的应用会渲染 2 或 8 次。
我正在使用 window.ethereum 与 MetaMask 交互,并且当我在 MetaMask 中更改一个帐户时会触发一个侦听器。这应该每次只触发 console.logs 一次,但它们会被触发 8 次。
如果我删除 useEffect,它们会被触发 2 次。所有应用中均无其他 useEffects。
useEffect((loading) => {
let isMounted = true;
setDarkMode(JSON.parse(localStorage.getItem('isDark')));
setLoading(true);
loadBloackchainData(isMounted,loading);
// cleanup
return () => (isMounted = false);
},[]);
const ethereum = window.ethereum
ethereum.on('accountsChanged',function (accounts) {
console.log('is Metamask installed?',ethereum.isMetaMask);
console.log('ethereum.networkVersion : ',ethereum.networkVersion );
console.log('ethereum.selectedAddress : ',ethereum.selectedAddress );
});
为什么被解雇了 8 次?
解决方法
也许您不经意间在每次渲染时添加了一个新的 V_
处理程序?
每次渲染时,您可能会添加一个新的处理程序,当帐户信息更改时,您的应用程序可能会调用该处理程序。您可能应该在 accountsChanged
内订阅/取消订阅该事件:
useEffect
useEffect 文档描述了您可能需要如何以及为何需要使用此技术在订阅后进行清理:https://reactjs.org/docs/hooks-effect.html#example-using-hooks-1
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。