私は、React、Next.Js、semantic-ui-react、およびSolidityを使用しています。ユーザーのアドレス(MetaMaskから)とProjectTitle(ユーザーが設定)を、semantic-ui-reactカードのメタ情報として出力することが私の目標です。 「ヘッダー」のアドレスを印刷することはできますが、ProjectTitleを「メタ」として印刷することはできません。タイトルは文字列にする必要がありますが、Object Promiseを受け取っています。
static async getInitialProps() {
const projects = await factory.methods.getDeployedProjects().call();
return {
projects
};
}
async getProjectTitle(address) {
let title;
try {
title = await factory.methods.projectTitle(address).call();
} catch (err) {
console.log('err');
}
return title;
}
renderProjects() {
const items = this.props.projects.map(address => {
return {
header: address,
color: 'green',
description: (
<Link route={`/projects/${address}`}>
<a>View Project</a>
</Link>
),
**meta: this.getProjectTitle(address)**,
fluid: true,
style: { overflowWrap: 'break-Word' }
};
}, );
return <Card.Group items={items} />
}
連帯契約の一部:
address[] public deployedProjects;
mapping(address => string) public projectTitle;
function createProject(string startup, string title, string deadline, string description, uint wage) public {
address newProject = new Project(startup, title, deadline, description, wage, msg.sender);
projectTitle[newProject] = title;
deployedProjects.Push(newProject);
}
function getDeployedProjects() public view returns (address[]) {
return (
deployedProjects
);
}
基本的なフレームワークは、Stephen GriderによるUdemyコース「Ethereum and Solidity:The Complete Developer's Guide」からのものです。
Object PromiseをStringに直接変換する方法はありません。処理を続行する唯一の方法は、await
関数を呼び出すか、.then()
とコールバック関数を使用することです。