Вызов функций solidity в ReactJS

#javascript #reactjs #solidity

#javascript #reactjs #solidity

Вопрос:

Я новичок в ReactJS и Solidity. Я тестирую веб-интерфейс интеллектуального контракта solidity.

Основная цель смарт-контракта заключается в том, чтобы принимать для добавления файлов (описание хэш) и запрашивать количество файлов.

Когда я тестирую его с помощью remix, он работает очень хорошо, так что проблема заключается в связи между Solidity и React.

Любая помощь?

 import React, { Component } from 'react';
import Layout from '../../components/Layout';
import { Form, Button, Input, Message } from 'semantic-ui-react'
import auction from '../../src/auction';
import web3 from '../../src/web3';

class FileNew extends Component {
  state = {
    description: '',
    hash: '',
    fileCounts: ''
  };

  async componentDidMount() {
    const manager = await auction.methods.manager().call();
    const fileCounts = await auction.methods.FileCounts().call();
    this.setState({ manager, fileCounts });
  }

  onSubmit = async (event) => {
    await auction.methods.addFile(this.setState.description, this.setState.hash);
  }

  render() {
    return (
      <Layout>
     <h1> Create new file </h1>
      <Form >
          <Form.Field>
            <label>desc</label>
            <Input label="First Name" labelPosition="right" value={this.state.description}
             onChange={event =>
               this.setState ({description: event.target.value})}
             />
             <label>hash</label>
             <Input label="Last Name" labelPosition="right" value={this.state.hash}
              onChange={event =>
                this.setState ({hash: event.target.value})}
              />
              <Button type='submit' onClick={this.onSubmit}>Submit</Button>

          </Form.Field>
          <p>The number of files is {this.state.fileCounts}</p>
        </Form>
     </Layout>
    );
  }
}
export default FileNew
  

Ответ №1:

В onSubmit методе FileNew компонента доступ к свойствам его состояния осуществляется неправильным способом из this.setState .

Использовать …

 onSubmit = async (event) => {
  try {
     await auction.methods.addFile(this.state.description, this.state.hash);
  } catch (e) {
     // Send error to Error reporting service in 
     // production/staging stage or log to console in dev.
     console.error(e);
  }

}
  

Комментарии:

1. Не работает! количество файлов не увеличивается

2. Возможно ли auction.methods.addFile вызвать Error ?

3. Я внес некоторые изменения, и я думаю, что теперь соединение установлено успешно, но с некоторыми ошибками. я изменил onSubmit, чтобы он выглядел следующим образом onSubmit = async (событие) => { постоянные учетные записи = web3.eth.getAccounts(); ожидают аукциона.методы.addFile({ описание: this.state.description, хэш: this.state. хэш }); }; и теперь я получаю эту ошибку с консоли: Не перехвачено (в обещании) Ошибка: неверное количество параметров для «addFile». Получено 1, ожидалось 2!

4. Можете ли вы поделиться сигнатурой метода для auction.methods.addFile ? Также вы хотите обернуть это в try / catch. Я отредактировал пример, чтобы показать это.

5. функция addFile(string _description, string _hash) общедоступна { FileCounts ; files[FileId] = file(_description, _hash); FileId ; выдает _fileCreated(FileId); }