首页 > 解决方案 > 从与 ether.js 的反应中查询视图函数的最佳方法?

问题描述

js 与我的智能合约进行交互。我的合同有这样的功能,例如:

  function getOfferById(uint256 _tokenId) public view returns (uint256) {
    require(_tokenId < MAX_B, "This tokenId does not exist");
    uint256 offer = bOffers[_tokenId];
    require(offer > 0, "There is no offer for this token");
    return offer;
}

现在要在页面加载时或每当有新事件出现并且这些数据可能已更改时查询此数据时,我是这样做的:

useEffect(() => {
    async function getOfferById() {
      if (myContracts) {
        const _getOfferById = myContracts.getOfferById;
        if (_getOfferById && id) {
          try {
            const _offer = await _getOfferById(id);
            setoffer(formatUnits(_offer, 'ether'));
          } catch (e) {
            setoffer(0);
          }
        }
      }
    }
    getOfferById();
  }, [myContracts, id, myEventOfferCreated, myEventOfferCanceled]);

但是这样一来,我的元掩码总是会收到很多控制台错误,因为 require 语句经常命中。

最好的方法是什么?

标签: reactjsethereumsolidityuse-effectethers.js

解决方案


推荐阅读