WEBアプリの初期状態をセットアップしよう
🐰 Web アプリケーションから NFT キャラクターを Mint する
前回のレッスンでは、Webアプリケーションからユーザーのウォレットアドレスにアクセスする機能を実装しました。
これから、Webアプリケーションから、コントラクトを呼び出しNFTキャラクターをMintする機能を実装していきます。
下記に、Webアプリケーションのレンダリングロジックを記します。
シナリオ 1. ユーザーが Web アプリケーションにログインしていない場合
👉 WEBアプリ上に、"Connect Wallet to Get Started" ボタンを表示します。
シナリオ 2. ユーザーは Web アプリケーションにログインしており、かつ NFT キャラクターを持っていない場合
👉 WEBアプリ上に、SelectCharacter コンポーネントを表示します。
シナリオ 3. ユーザーは Web アプリケーションにログインしており、かつ NFT キャラクターを持っている場合
👉 WEBアプリ上に、「Arena Component」を表示します。
- 「Arena Component」は、プレイヤーがボスと戦う場所です。
それでは、上記のシナリオを実装するロジックを構築していきましょう。
🧱 SelectCharacterコンポーネントを作る
ターミナルに向かい、client/src/Components/SelectCharacterフォルダに移動してください。
clientディレクトリ上で下記を実行すると、スムーズに移動できます。
cd src/Components/SelectCharacter
SelectCharacterの中に、SelectCharacterコンポーネントのロジックと、スタイルを保存していきます。
それでは、SelectCharacterフォルダの中にindex.jsというファイルを新しく作成しましょう。
ターミナル上で、SelectCharacterフォルダにいる状態で、下記を実行すると、index.jsが簡単に作成できます。
touch index.js
VS Codeでindex.jsを開いて、下記のコードをは貼り付けましょう。
import React, { useEffect, useState } from "react";
import "./SelectCharacter.css";
// setCharacterNFTについては、あとで詳しく説明します。
const SelectCharacter = ({ setCharacterNFT }) => {
return (
<div className="select-character-container">
<h2>⏬ 一緒に戦う NFT キャラクターを選択 ⏬</h2>
</div>
);
};
export default SelectCharacter;
index.jsが更新できたら、App.jsを編集して、条件つきレン ダリングを実装していきます。
👁 レンダリングロジックを構築してシナリオを実装する
まず、client/src/App.jsファイルをVS Codeで開き、新しく作成したコンポーネントをインポートしていきましょう。
import './App.css';の直下に下記を追加してください。
// SelectCharacter に入っているファイルをインポートします。
import SelectCharacter from "./Components/SelectCharacter";
この処理により、SelectCharacterに入っているファイル(index.jsとSelectCharacter.css)をApp.jsから呼び出せます。
次に、下記のコードを const [currentAccount, setCurrentAccount] = useState(null)の直下に追加しましょう。
// characterNFT と setCharacterNFT を初期化します。
const [characterNFT, setCharacterNFT] = useState(null);
ここでは、characterNFTとsetCharacterNFTという状態変数を初期化しています。
これらの変数は、これから実装するシナリオの中で使用します。詳しくは、後で説明します。
次に、下記のシナリオをApp.jsに実装していきます。
シナリオ 1. ユーザーが Web アプリケーションにログインしていない場合
👉 WEBアプリ上に、"Connect Wallet to Get Started" ボタンを表示します。
シナリオ 2. ユーザーは Web アプリケーションにログインしており、かつ NFT キャラクターを持っていない場合
👉 WEBアプリ上に、SelectCharacter コンポーネントを表示します。
まず、renderContentという名前のレンダリング関数を作成します。
renderContent関数に、すべてのシナリオを実装するロジックを記載していきます。
checkIfWalletIsConnectedを宣言したコードブロックの直下に下記を追加しましょう。
// レンダリングメソッド
const renderContent = () => {
// シナリオ1.
// ユーザーがWEBアプリにログインしていない場合、WEBアプリ上に、"Connect Wallet to Get Started" ボタンを表示します。
if (!currentAccount) {
return (
<div className="connect-wallet-container">
<img src="https://i.imgur.com/TXBQ4cC.png" alt="LUFFY" />
<button
className="cta-button connect-wallet-button"
onClick={connectWalletAction}
>
Connect Wallet to Get Started
</button>
</div>
);
// シナリオ2.
// ユーザーはWEBアプリにログインしており、かつ NFT キャラクターを持っていない場合、WEBアプリ上に、を表示します。
} else if (currentAccount && !characterNFT) {
return <SelectCharacter setCharacterNFT={setCharacterNFT} />;
}
};
最後に、renderContentメソッドを呼び出していきましょう。
App.js