#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); }