es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿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);
    }
}
Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Para pasar el valor userAccount obtenido de web3.eth.getAccounts() a la función balanceOf(), simplemente sustituya el parámetro con la variable userAccount.

    En su código, ya ha hecho esto correctamente:

    let daiTokenBalance = await daiToken.methods.balanceOf(userAccount).call();
    

    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.log userAccount después de establecerlo con setUserAccount(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 de userAccount cada vez que cambie:

    useEffect(() => {
       console.log(userAccount);
    }, [userAccount])
    

    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.

Comments are closed.