Реакт считает, что мой «AbstractContract» является «объектом» и не будет отображаться при вызове метода - PullRequest
0 голосов
/ 18 июня 2019

Я следую учебному пособию о том, как создать приложение реакции, используя цепочку блоков Ethereum.У меня есть собственный локальный блокчейн для тестирования, и я успешно добавил к нему свой контракт.Теперь я хочу получить некоторую информацию из метода в этом контракте и отобразить ее с помощью реакции.Однако, когда я беру контракт и устанавливаю состояние, реакция возвращает объект вместо «AbstractContract».Может кто-нибудь сказать мне, почему это происходит?

    class App extends Component {
        componentWillMount() {
            this.loadBlockchainData()
        }

        async loadBlockchainData() {
            //grabbing the MetaMask network data
            const web3 = new Web3(Web3.givenProvider || "http://localhost:7545")
            const network = await web3.eth.net.getNetworkType()
            console.log("network:", network)

            //pulling the wallet/accounts from MetaMask
            const accounts = await web3.eth.getAccounts()
            console.log("account:", accounts[0]);
            this.setState({ account: accounts[0] })

           //Grabbing the contract info from blockchain
           const todoList = new web3.eth.Contract(TODO_LIST_ABI, TODO_LIST_ADDRESS)
           console.log("List address", TODO_LIST_ADDRESS)
           console.log("List add", todoList.address)
           console.log("todoList", todoList)
           this.setState({todoList})

           //Calling Methods from Contract
           const taskCount = await todoList.methods.taskCount().call()
           console.log("taskCount", taskCount)
           this.setState({taskCount})
       }

  constructor(props) {
    super(props)
    this.state = { 
    account: '',
    taskCount: 0
    }
  }

  render() {
    return (
      <div className="container">
        <h1>Hello, World!</h1>
        <p>Your account: {this.state.account}</p>
    <p>Your Task Count: {this.state.taskCount}</p>
      </div>
    );
  }
}

Это возвращаемые журналы:

return address is :0xBcA4622f7dC5205cf08454cE27B87966286184d2
todoList: 
Object { providerResolver: {…}, givenProvider: Proxy, _currentProvider: {…}, _defaultAccount: undefined, _defaultBlock: "latest", _transactionBlockTimeout: 50, _transactionConfirmationBlocks: 24, _transactionPollingTimeout: 750, _defaultGasPrice: undefined, _defaultGas: undefined, … }

taskCount:
Object { _hex: "0x01", … }

Проблема: todoList должен быть «AbstractContract» taskCount начинается с 0, но это должно быть 1, так как задача являетсясоздается при выполнении договора.

Вышла ошибка: Objects are not valid as a React child (found: object with keys {_hex}). If you meant to render a collection of children, use an array instead.

1 Ответ

0 голосов
/ 20 июня 2019

Ну, хорошие новости!

Это исправило само себя. Я перезапустил его после копирования, удаления и вставки моего кода обратно. Он по-прежнему показывает не «AbstractContract», а все, как предполагалось.

...