Const не может быть определен в react

#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] from loadBlockchainData является локальным. Вы не можете получить к нему доступ с консоли.

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 .