Возникли проблемы с интеграцией web3 из Metamask в React. Версия метамаски: web3@1.0.0-beta.34
import Web3 from 'web3'
let web3;
window.addEventListener('load', function () {
if (typeof window.web3 !== 'undefined') {
web3 = new Web3(window.web3.currentProvider);
} else {
// No web 3 provider
console.log("Please install Metamask");
}
});
export default web3;
Получение следующей ошибки:
window is not defined
ReferenceError: window is not defined
at Object../lib/getWeb3.js (lib/getWeb3.js:5:0)
Вопрос: Ваш скрипт работает на стороне клиента или на стороне сервера? Если на стороне сервера - то вы не можете получить доступ к оконному объекту.
Если на стороне клиента - посмотрите на этот вопрос https://stackoverflow.com/questions/43220331/is-the-window-object-of-react-synthetic
(typeof window !== 'undefined' && typeof window.web3 !== 'undefined')
, тогда его первое возвращение позаботилось бы о том, чтобы быть в браузере, его else было оставлено пустым, и OP нужно было иметь дело со случаем, когда OP находится на стороне сервера примерно так: const provider = new Web3.providers.HttpProvider()
. Заметили использование web3
и providers
повсюду? Звуки эфириума связаны со мной.
Хенк
window
не определено. Я подозреваю, что вы используете этот скрипт на стороне сервера. Наверное, это как-то связано. Вы, вероятно, получите лучшие ответы, если зададите свой вопрос на Stack Overflow.Даниэль
web3
? Разве это не позволяет нам взаимодействовать с узлами эфириума? Скорее всего, никто не использует Metamask в своем браузере, так как же мы можем создавать децентрализованные приложения для людей, которые не используют Metamask? Хм, давайте посмотрим, есть ли React, Next.js, и те инженеры, которые используют эти технологии для того, чтобы сделать децентрализованные приложения доступными для мира, не использующего Metamask, не использующего Rinkeby, будут время от времени сталкиваться с этими проблемами.