#reactjs #blockchain #ethereum #web3js
#reactjs #блокчейн #ethereum #web3js
Вопрос:
Я не могу определить const в react.
После запуска веб-браузера я получил сообщение об ошибке при вводе accounts
консольной команды.
>accounts
VM768:1 Uncaught ReferenceError: accounts is not defined
at <anonymous>:1:1
(anonymous) @ VM768:1
Я подумал, что это Web3
ошибка, поэтому я определил accounts
в консольной команде.
Однако я мог бы определить accounts
.
>const accounts = web3.eth.accounts[0]
<undefined
>accounts
<"0xeb827c448545--------1a7d5ced86ac3"
Я хочу показать адрес по this.state.account
.
Не могли бы вы дать мне какой-нибудь совет, пожалуйста?
import React, { Component } from 'react';
import Web3 from 'web3';
import './App.css';
class App extends Component {
conponentWillmount() {
this.loadBlockchainData()
}
async loadBlockchainData() {
const web3 = new Web3(Web3.givenProvider || "http://localhost:7545")
const network = await web3.eth.net.getNetworkType()
console.log("network:", network)
const accounts = await web3.eth.accounts[0]
this.state({ account: accounts[0]})
console.log("account:", accounts[0])
// Fetch Account
}
constructor(props) {
super(props)
this.state = { account: ''}
}
render() {
return (
<div className="container">
<h1>Hello world</h1>
<p>Your account : {this.state.account} </p>
</div>
);
}
}
export default App;
Комментарии:
1. Не могли бы вы вставить код файла «./web3»?
2.
const accounts = await web3.eth.accounts[0]
fromloadBlockchainData
является локальным. Вы не можете получить к нему доступ с консоли.3. @estus Я использовал консоль в локальном.
4. @estus Я немного отредактировал свой код.
5. @Ywzx Я использую 16.8.6
Ответ №1:
const accounts = await web3.eth.accounts[0]
переменная является локальной для loadBlockchainData
метода. К нему нельзя получить доступ из командной строки консоли, потому что оттуда доступны только глобальные переменные.
В случае accounts
необходимости отладки в инструментах разработчика браузера, внутри можно настроить точку останова loadBlockchainData
.
Комментарии:
1. Спасибо за ваш комментарий. Я понимаю, что это не может быть доступно. Тогда как мне показать свою учетную запись во внешнем интерфейсе?
2. Установив его в состояние. У вас опечатка,
this.state({ account: accounts[0]})
, так и должно бытьthis.setState
.3. Спасибо! Я исправил свою опечатку, но учетная запись по-прежнему не отображается спереди. Есть ли какие-либо проблемы?
4. Похоже, их нет. Вы не обрабатываете ошибки в loadBlockchainData и не упомянули, есть ли ожидаемая консоль. вывод журнала. В любом случае, если вызов this.setState достигнут, ожидается, что он обновит компонент и покажет его в this.state.account .