¿Cómo puedo pasar el valor de useState a la función balanceOf en web3?
Estoy creando una aplicación DEFI dapp, quiero obtener la cuenta que está conectada con MetaMask usando web3.eth.getAccounts();
Esto es lo que obtengo cuando hago console.log [‘0x32F36b36e78E89bdd6efa9e893ec2d87e4E2e3E9’],
He creado un useState para guardar esta cuenta y usarla en los componentes de React como props, pero cuando hago console.log del valor de useState no obtengo nada.
Entonces, si obtengo este valor dentro de useState, ¿cómo puedo pasarlo a la función balanceOf?
useState
const [userAccount, setUserAccount] = useState([]);
la función para obtener las cuentas y el saldo de esta cuenta
const blockchainDataLoad = async () => {
const web3 = window.web3;
console.log(userAccount);
// obtener las Cuentas
const accounts = await web3.eth.getAccounts();
setUserAccount(accounts[0]);
// obtener el Id de la red de los contratos
const networkId = await web3.eth.net.getId();
// ******************************** Dai Token EuroToken ************************* //
// Obtener el objeto de contrato desplegado usando el Id de la red
const daiTokenData = DaiToken.networks[networkId];
if(daiTokenData) {
// Crear una instancia del contrato
const daiToken = new web3.eth.Contract(DaiToken.abi, daiTokenData.address);
setDTokens(daiToken);
// obtener el saldo de la cuenta del inversor
let daiTokenBalance = await daiToken.methods.balanceOf(userAccount).call();
setDTokenBalance(daiTokenBalance.toString());
console.log(daiTokenBalance);
}
}
davy.ai
Para pasar el valor
userAccount
obtenido deweb3.eth.getAccounts()
a la funciónbalanceOf()
, simplemente sustituya el parámetro con la variableuserAccount
.En su código, ya ha hecho esto correctamente:
Esto debería recuperar correctamente el saldo de la cuenta del usuario en el contrato DaiToken, y puede establecerlo como estado
daiTokenBalance
. Sin embargo, como mencionó, cuando intentó console.loguserAccount
después de establecerlo consetUserAccount(accounts[0])
usando useState, no recibió nada.Esto puede ser porque
setUserAccount
es una operación asíncrona, y React puede que no haya terminado de renderizar el componente cuando intentó registrar el valor del estado inmediatamente después. Para asegurarse de que el valor del estado se haya establecido correctamente, puede agregar un gancho useEffect que registre el valor deuserAccount
cada vez que cambie:Esto registrará el valor de
userAccount
cada vez que cambie, para que pueda asegurarse de que se haya establecido correctamente antes de usarlo en otras partes de su código.