Как установить хэш транзакции с помощью useState в транзакции Ethereum

#reactjs #transactions #react-hooks #ethereum

#reactjs #транзакции #реагирующие крючки #ethereum

Вопрос:

Я хотел бы установить переменную с помощью реактивных перехватов. Всякий раз, когда я отправляю транзакцию Ethereum, ее хэш можно получить с помощью метода on(‘transactionHash’, {…}), но если я попытаюсь вызвать setTransactionHash, ничего не произойдет. Вот код:

 import React, {useState, useEffect, useCallback} from 'react';
import collegamentoConDb from '../api/collegamentocondb';
const Admin = ()=>{

    const [transactionHash, setTransactionHash] = useState("");
    ...
    try{
      window.ethereum.enable();
      const accounts = await web3.eth.getAccounts();
      await contract.methods.notarizzazione(hashCampi).send({
        from:accounts[0]
      }).on('transactionHash', (hash)=>{
        setTransactionHash(hash)
      });
    
} catch(err){
  console.log(err);
}
//db call

   const fileTestoPdf = await collegamentoConDb.post('/creapdf', {id, transactionHash}); 
   ...
  

Когда я читаю файл журнала, transactionHash не обновляется, и я не понимаю, почему. Кто-нибудь может мне помочь?

Спасибо.

Ответ №1:

Не могли бы вы получить хэш в консоли? если да, то попробуйте const [transactionHash, setTransactionHash] = useState();

Комментарии:

1. Нет, я не могу. Консоль пуста. Я почти уверен, что метод, который я использую, правильный, потому что все работает без перехватов.

2. Хорошо, понял, вы можете попробовать on('transactionHash', ((hash)=>{ setTransactionHash(hash) });

3. Это не работает. Если я console.log(transactionHash) после транзакции, он печатает undefined.

4. не могли бы вы добавить код в codesandbox или StackBlitz, чтобы я мог больше помочь?

5. Вы можете найти часть моего кода здесь. stackblitz.com/edit/react-9khr3p