nextjs入门

创建项目

npx create-next-app 项目名

体验文件路由 

nextjs提供了文件路由的功能, 根据文件系统的目录结构, 可以识别为对应的页面路由

创建页面

首先, 在src下创建pages目录, 然后创建一个about文件(对应about页面)和main/index.js文件(对应首页)

pages/main/index 

const Main=()=>{
    return (
        <div>main</div>
    )
}

export default Main

pages/about.js

const About = () => {
    return (
        <div>about</div>
    )
}

export default About

启动项目并查看页面

npm run dev

pages下的文件, 文件名作为路由, 显示为页面

pages下的文件夹, 文件夹的名称作为路由, 对应该文件夹的index文件的内容

多级路由

创建pages/content/mutli/a目录, 然后创建两个文件(index和test)

pages/content/multi/a/index.jsx
const Index = () => {
    return (
        <>index</>
    )
}
export default Index

pages/content/multi/a/test
 

const Test = () => {
    return (
        <>test</>
    )
}
export default Test

访问页面

 

动态路由

nextjs支持文件路由拥有动态的路径参数, 文件名称为 [参数名].js或jsx , 我们创建pages/dynamic/[id].jsx

pages/dynamic/[id].jsx
import {useRouter} from "next/router";

export default function DynamicId() {
    const router = useRouter()
    console.log(router)

    return (
        <div>
            {/*获取路由参数*/}
            current id - {router.query["id"]}
        </div>
    )
}
访问页面

slug 长路由

nextjs支持匹配一个路由下的多级子路由

pages/dynamic/[...slug].js
import {useRouter} from "next/router";

const Slug = () => {
    let slug = [];
    const router = useRouter();
    slug = router.query.slug;
    return (
        <div>
            <ul>
                {slug ?
                    slug.map((slug, i) => <li key={i}>{slug}</li>) :
                    <></>}
            </ul>
        </div>
    );
};

export default Slug;
访问页面

这里应该是匹配到[id]了

 路由跳转

我们使用Link组件来跳转
pages/main/index.js
import Link from "next/link";

const Main = () => {
    return (
        <div>
            <Link href={'/dynamic/123'}>to dynamic id</Link>
        </div>
    )
}

export default Main
访问页面

整合chakra组件库

安装依赖

npm i @chakra-ui/react @chakra-ui/next-js @emotion/react @emotion/styled framer-motion

设置

// pages/_app.js
import { ChakraProvider } from '@chakra-ui/react'
// 个人踩坑
// 如果用了_app.js, 就需要在这里也引入globals.css或tailwind的css配置, 才能使tailwind生效
import '@/app/globals.css'

function MyApp({ Component, pageProps }) {
  return (
    <ChakraProvider>
      <Component {...pageProps} />
    </ChakraProvider>
  )
}

export default MyApp

应用程序目录设置

// app/providers.tsx
'use client'

import { CacheProvider } from '@chakra-ui/next-js'
import { ChakraProvider } from '@chakra-ui/react'

export function Providers({ children }: { children: React.ReactNode }) {
  return (
    <CacheProvider>
      <ChakraProvider>{children}</ChakraProvider>
    </CacheProvider>
  )
}

// app/layout.tsx
import { Providers } from './providers'

export default function RootLayout({children}) {
    return (
        <html lang="en">
        <body className={inter.className}>
        <Providers>{children}</Providers>
        </body>
        </html>
    )
}

使用

pages/main/index.js
import Link from "next/link";
import {
    Alert,
    AlertIcon,
} from '@chakra-ui/react'

const Main = () => {
    return (
        <div>
            <Alert status='success'>
                <AlertIcon />
                Data uploaded to the server. Fire on!
            </Alert>
            <Link href={'/dynamic/123'}>to dynamic id</Link>
        </div>
    )
}

export default Main

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

飞鸟malred

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值