[英]How do I unsubscribe to the dispatch to grab new data onload on useEffect? - I'm using Redux Toolkit
[英]How do I grab Contract Balance with useEffect?
情况
我已经创建了一个智能合约并将abi
和合约地址导入到我的 React 应用程序中。
我已经成功访问了我的 React 应用程序中的方法和选项。 我使用 useEffect 没有问题。
问题
但是,我正在努力获得合同的余额。 我已经尝试了我所理解的一切,但没有结果。
此代码工作正常
import web3 from "./web";
import { useState, useEffect } from "react";
import Lottery from "./Lottery";
const [isManager, setManager] = useState(
"<em>Loading manager address...</em>"
);
useEffect(() => {
const getManager = async () => {
const mangWallet = await Lottery.methods.manager().call();
console.log(mangWallet);
setManager(mangWallet);
};
getManager();
}, []);
这不起作用 - 余额保持为 0。更重要的是,控制台日志甚至不显示 0。就好像整个getBalance
function 没有运行?
const [balance, setBalance] = useState(0);
useEffect(() => {
const getBalance = async () => {
const contBal = await web3.eth.getBalance(Lottery.contract_address);
setBalance(contBal);
console.log(balance);
};
getBalance();
}, []);
需要注意的几点:
contract_address
持有链上的智能合约地址,存储在 Lottery.js 文件中app.js
。 这意味着有两个useEffect
函数。 我不确定你的问题是什么。 但我认为这个 async const contBal = await web3.eth.getBalance(Lottery.contract_address);
可以抛出异常。 所以我认为你需要像这样添加 try catch :
const [balance, setBalance] = useState(0);
useEffect(() => {
const getBalance = async () => {
try {
const contBal = await web3.eth.getBalance(Lottery.contract_address);
setBalance(contBal);
console.log(balance);
} catch(error) {
console.log(error);
}
};
getBalance();
}, []);
关于console.log(balance)
,它总是记录 0。因为它是useEffect
的行为。 所以如果你想看到balance
值的变化是这样的,你需要创建另一个useEffect
:
useEffect(() => { console.log(balance) }, [balance])
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.