Как сопоставить web3 с состоянием react.js

Как бы вы сопоставили изменяющуюся переменную из web3 с компонентом react.js? Пример:

приложение класса расширяет компонент {
  конструктор (реквизит) {
    супер (реквизит);
    это.состояние = {
      номер блока: web3.eth.blockNumber,
    }
  }

  оказывать() {
    возвращаться(
      {это.состояние.номерблока}
    )
  }
}

Что было бы наилучшей практикой без использования setTimeout//requestAnimationFramesetInterval

Ответы (1)

Я понял это, выполнив следующие действия:

const web3 = новый Web3(новый Web3.providers.HttpProvider("http://localhost:8545"));
const abi = [{"константа":истина,"входы":[],"имя":"владелец","выходы":[{"имя":"","тип":"адрес"}]," подлежащий выплате: false, "тип": "функция"}, {"оплачиваемый": false, "тип": "запасной вариант"}];
постоянный адрес = "0x3E2A850420e024d2f269d45F85a24Dc6F586277D";
const deployedContract = web3.eth.contract(abi).at(адрес);
константный фильтр = web3.eth.filter('последний');

приложение класса расширяет компонент {
  конструктор (реквизит) {
    супер (реквизит);
    это.состояние = {
      номер блока: web3.eth.blockNumber,
      ... развернутый контракт
    }
  }
  компонентDidMount () {
    filter.watch((ошибка, результат) =>{
      const block = web3.eth.getBlock(result, true);
      this.setState({blockNumber: block.number});
    });
  }

таким образом, каждый раз, когда у вас будет новый блок, ваш компонент реакции будет повторно отображать себя, поэтому вы всегда будете получать новые значения из своего контракта.

К вашему сведению, в web3 1.0 web3.eth.filterзаменено на ` web3js.readthedocs.io/en/1.0/web3-eth-subscribe.html .
подписка работает только для соединений через веб-сокет