nextjs前端dapp实现可以合成的NFT(中)

介绍

一个开源solidity合集仓库
https://github.com/qdwds/smart-contracts
以太坊ERC721全栈开发开NFT合集从入门到项目实战项目
https://learnblockchain.cn/course/31
https://edu.51cto.com/course/33566.html

一起学习吧

我们一起沟通、交流、学习吧!

可合成的NFT

这一章节主要是前端实现NFT的项目架构。

项目目录

.
├── README.md
├── abi
│   └── ComposeNFT.json
├── components
│   ├── Botton
│   │   └── index.tsx
│   ├── Header
│   │   └── index.tsx
│   └── NFT
│       └── index.tsx
├── deploy.sh
├── next-env.d.ts
├── next.config.js
├── package-lock.json
├── package.json
├── pages
│   ├── _app.tsx
│   ├── _document.tsx
│   ├── api
│   │   └── hello.ts
│   └── index.tsx
├── pnpm-lock.yaml
├── public
│   ├── favicon.ico
│   ├── next.svg
│   └── vercel.svg
├── src
│   └── rainbowkit.ts
├── styles
│   └── globals.css
└── tsconfig.json

@rainbow-me/rainbowkit


import {
    getDefaultWallets
} from '@rainbow-me/rainbowkit';
import { configureChains, createClient } from 'wagmi';
import { hardhat, goerli } from 'wagmi/chains';
import { publicProvider } from 'wagmi/providers/public';

export const { chains, provider } = configureChains(
    [hardhat, goerli],
    [
        publicProvider()
    ]
);

const { connectors } = getDefaultWallets({
    appName: 'My RainbowKit App',
    chains
});

export const wagmiClient = createClient({
    autoConnect: true,
    connectors,
    provider
})

_app.tsx

app.tsx为主要文件,里面引入了@rainbow-me/rainbowkit' 作为连接钱包。


import '../styles/globals.css'
import type { AppProps } from 'next/app'
import { RainbowKitProvider } from '@rainbow-me/rainbowkit';
import { WagmiConfig } from 'wagmi';
import '@rainbow-me/rainbowkit/styles.css';
import { wagmiClient, chains } from "../src/rainbowkit";
import Header from "../components/Header";
import { hardhat, goerli } from 'wagmi/chains';

export default function App({ Component, pageProps }: AppProps) {
    return (
        <>
            <WagmiConfig client={wagmiClient}>
                <RainbowKitProvider chains={chains} initialChain={goerli}>
                    <Header></Header>
                    <Component {...pageProps} />
                </RainbowKitProvider>
            </WagmiConfig>
        </>
    )
}

_document.tsx


import { Html, Head, Main, NextScript } from 'next/document'

export default function Document() {
  return (
    <Html lang="en">
      <Head />
      <body>
        <Main />
        <NextScript />
      </body>
    </Html>
  )
}

Hardhat.tsx组件

当前组件主要功能就是页面的头部,包括功能有引入钱包连接功能.

import * as React from 'react';
import AppBar from '@mui/material/AppBar';
import Box from '@mui/material/Box';
import CssBaseline from '@mui/material/CssBaseline';
import Button from '@mui/material/Button';

import Toolbar from '@mui/material/Toolbar';
import Typography from '@mui/material/Typography';
import Link from 'next/link';
import { ConnectButton } from '@rainbow-me/rainbowkit';
import Menu from '@mui/material/Menu';
import MenuItem from '@mui/material/MenuItem';

import Fade from '@mui/material/Fade';
const menu = [
    {
        path: "/",
        name: "NFT"
    }

]


export default function Header(props: any) {
    const [anchorEl, setAnchorEl] = React.useState<null | HTMLElement>(null);
    const open = Boolean(anchorEl);
    const handleClick = (event: React.MouseEvent<HTMLElement>) => {
        setAnchorEl(event.currentTarget);
    };
    const handleClose = () => {
        setAnchorEl(null);
    };

    return (
        <Box sx={{ display: 'flex' }}>
            <CssBaseline />
            <AppBar position='static'>
                <Toolbar>

                    <Typography
                        variant="h6"
                        component="div"
                        sx={{ flexGrow: 1, display: { xs: 'none', sm: 'block' } }}
                    >
                        <Link href={"/"}>
                            <span style={{ width: "200px", cursor: "grabbing" }}>
                                NFT全栈开发
                            </span>
                        </Link>
                    </Typography>
                    <Box sx={{ display: { xs: 'none', sm: 'block' } }}>
                        {menu.map(m => (
                            <Link href={m.path} key={m.name}>
                                <Button sx={{ color: '#fff' }}>{m.name}</Button>
                            </Link>
                        ))}
                        <Button sx={{ color: '#fff' }} onClick={() => window.open("https://qdwds.github.io/nftdocs/#/")}>docs</Button>
                        <Button
                            id="fade-button"
                            aria-controls={open ? 'fade-menu' : undefined}
                            aria-haspopup="true"
                            aria-expanded={open ? 'true' : undefined}
                            onClick={handleClick}
                            sx={{ color: "white" }}
                        >
                            课程地址
                        </Button>
                        <Menu
                            id="fade-menu"
                            MenuListProps={{
                                'aria-labelledby': 'fade-button',
                            }}
                            anchorEl={anchorEl}
                            open={open}
                            onClose={handleClose}
                            TransitionComponent={Fade}
                        >
                            <MenuItem onClick={() => window.open("https://learnblockchain.cn/course/31")}>登链社区</MenuItem>
                            <MenuItem onClick={() => window.open("https://edu.51cto.com/course/33566.html")}>51cto(可开发票)</MenuItem>
                            <MenuItem onClick={() => window.open("https://m.qlchat.com/api/gos?target=%2Fwechat%2Fpage%2Fchannel-intro%3FchannelId%3D2000019546152808%26ch_r%3DshareR1%26shareKey%3D32092306e23644dc8f74d65ceaf42031free%26sourceNo%3Dlink&pre=%2Fwechat%2Fpage%2Flive%2F2000019546239707%3FisBackFromShare%3DY%26wcl%3Dmiddlepage")}>千聊</MenuItem>
                        </Menu>
                    </Box>
                    <Box sx={{ marginLeft: 6 }}>
                        <ConnectButton />
                    </Box>
                </Toolbar>
            </AppBar>

        </Box>
    );
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值