#reactjs #ethereum #solidity #use-effect #ethers.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 amp;amp; id) {
try {
const _offer = await _getOfferById(id);
setoffer(formatUnits(_offer, 'ether'));
} catch (e) {
setoffer(0);
}
}
}
}
getOfferById();
}, [myContracts, id, myEventOfferCreated, myEventOfferCanceled]);
Но таким образом, я все время получаю много ошибок консоли от своей метамаски, потому что оператор require часто срабатывает.
Каков был бы лучший способ для этого?
Комментарии:
1. На чем
require()
он терпит неудачу? Первый или второй? … Если первый, вы запрашиваете несколькоid
s по одному и тому же контракту или по нескольким контрактам? Реализуют ли контракты ERC721Enumerable ? … Если второе, являетсяbOffers
public
ли свойство a?