【发布时间】:2020-07-31 14:16:45
【问题描述】:
我正在开发一个带有 ReactJS 和 solidity 的文档验证系统 - 智能合约。我想在前端显示我的智能合约 get().call() 方法的结果,带有弹出窗口甚至是简单的文本。我现在面临的问题是,当我尝试显示该方法的响应时,它会向我抛出该错误:
对象作为 React 子级无效。如果您打算渲染一组子项,请改用数组
这是我的solidity合约的代码:
pragma solidity ^0.5.0;
contract Proof1 {
struct FileDetails {
uint256 timestamp;
string owner;
}
mapping(string => FileDetails) files;
event logFileAddedStatus(
bool status,
uint256 timestamp,
string owner,
string fileHash
);
function set(string memory owner, string memory fileHash) public {
if (files[fileHash].timestamp == 0) {
files[fileHash] = FileDetails(block.timestamp, owner);
emit logFileAddedStatus(true, block.timestamp, owner, fileHash);
} else {
emit logFileAddedStatus(false, block.timestamp, owner, fileHash);
}
}
function get(string memory fileHash)
public
view
returns (uint256 timestamp, string memory owner)
{
return (files[fileHash].timestamp, files[fileHash].owner);
}}
这里是 onClick 方法中的.get().call() 方法:
onSubmitGet = async (event) => {
event.preventDefault();
const hash = document.getElementById("hash").value;
this.state.design = await this.state.contract.methods
.get(hash)
.call({ from: this.state.address })
.then((res) => this.setState({ result: res }));
};
这就是我使用 React 显示结果的方式:
const { result } = this.state;
<div>{result}</div>
【问题讨论】:
-
您应该将代码发布为文本而不是屏幕截图。我认为这就是为什么你的票数被否决的原因。
-
非常感谢您的帮助!
-
试试
console.log(result)看看它是什么类型的对象。它必须是一个字符串,null或一个反应组件实例。如果不是,那么让它成为其中之一,它应该可以工作...... -
如果我做这样的事情:
({result: JSON.stringify(res)})它会以 json 格式返回给我并显示它。这里的问题是我不想作为 json 我想找到其他方式来显示它。
标签: javascript reactjs user-interface solidity web3