📌 Main 페이지
🔖 main.tsx
import React, { FC, useState } from "react";
import { Box, Text, Flex, Button } from "@chakra-ui/react";
import { mintAnimalTokenContract } from "../contracts/index";
// import AnimalCard from "../components/AnimalCard";
interface MainProps {
account: string;
}
const Main: FC<MainProps> = ({ account }) => {
const [newAnimalCard, setNewAnimalCard] = useState<string>();
const onClickMint = async () => {
try {
if (!account) return;
const response = await mintAnimalTokenContract.methods
.mintAnimalToken()
.send({ from: account });
if (response.status) {
const balanceLength = await mintAnimalTokenContract.methods
.balanceOf(account)
.call();
const animalTokenId = await mintAnimalTokenContract.methods
.tokenOfOwnerByIndex(account, parseInt(balanceLength, 10) - 1)
.call();
const animalType = await mintAnimalTokenContract.methods
.animalTypes(animalTokenId)
.call();
// setNewAnimalType(animalType);
}
} catch (error) {
console.error(error);
}
};
return (
<Flex
w="full"
h="100vh"
justifyContent="center"
alignItems="center"
direction="column"
>
<Box>
{newAnimalCard ? (
<div>AnimalCard</div>
) : (
<Text>hello</Text>
)}
</Box>
<Button mt={4} size="sm" colorScheme="blue" onClick={onClickMint}>
Mint
</Button>
</Flex>
);
};
export default Main;


const mintAnimalTokenAddress = "0xf4c098AeEAFCBA566aB920FEadbB495b2F9C8F3F"
const saleAnimalTokenAddress = "0xE557E0586aB3caf70Cc6d105D4f213E222257CD1"
이미 react에 가져다놓은 address를 At Address에 붙여넣으면 기존의 address를 사용할 수 있다.
📌 Main 페이지 작성 -2)
📦 스마트 컨트랙트 함수 확인
🔖 balanceOf

- balanceOf -> 사용자 지갑 계정 넣기
- 아래 뜨는 숫자
- 내가 가지고 있는 NFT 개수
🔖 tokenOfOwnerByIndex

- 토큰 아이디 추출
🔖 animalTypes

- 어떤 사진인지
📦 react
🔖 components > Animalcard.tsx
import React, { FC } from "react";
import { Image } from "@chakra-ui/react";
interface AnimalCardProps {
animalType: string;
}
const AnimalCard: FC<AnimalCardProps> = ({ animalType }) => {
return (
<Image w={150} h={150} src={`images/${animalType}.png`} alt="AnimalCard" />
);
};
export default AnimalCard;
🔖 routes > main.tsx
import React, { FC, useState } from "react";
import { Box, Text, Flex, Button } from "@chakra-ui/react";
import { mintAnimalTokenContract } from "../contracts/index";
import AnimalCard from "../components/AnimalCard";
interface MainProps {
account: string;
}
const Main: FC<MainProps> = ({ account }) => {
const [newAnimalType, setNewAnimalType] = useState<string>();
const onClickMint = async () => {
try {
if (!account) return;
const response = await mintAnimalTokenContract.methods
.mintAnimalToken()
.send({ from: account });
if (response.status) {
const balanceLength = await mintAnimalTokenContract.methods
.balanceOf(account)
.call();
const animalTokenId = await mintAnimalTokenContract.methods
.tokenOfOwnerByIndex(account, parseInt(balanceLength, 10) - 1)
.call();
const animalType = await mintAnimalTokenContract.methods
.animalTypes(animalTokenId)
.call();
setNewAnimalType(animalType);
}
} catch (error) {
console.error(error);
}
};
return (
<Flex
w="full"
h="100vh"
justifyContent="center"
alignItems="center"
direction="column"
>
<Box>
{newAnimalType ? (
<AnimalCard animalType={newAnimalType} />
) : (
<Text>Let's mint Animal Card!!!</Text>
)}
</Box>
<Button mt={4} size="sm" colorScheme="blue" onClick={onClickMint}>
Mint
</Button>
</Flex>
);
};
export default Main;

'SSAFY 6기 > 📌blockchain' 카테고리의 다른 글
인프런 nft 강좌 #2 - react 세팅 (0) | 2022.03.14 |
---|---|
인프런 nft 강좌 #1 스마트 컨트랙트 작성 (0) | 2022.03.10 |
인프런 Lottery Dapp 강좌 #1 (0) | 2022.03.03 |
댓글