nextjs入门|青训营笔记

106 阅读2分钟

这是我参与「第五届青训营 」笔记创作活动的第10天

nextjs入门

创建项目

使用create-react-app

npm i -g create-next-app

create-next-app nextapp

或npx create-next-app

目录结构

  • components文件夹 组件
  • node_modules文件夹 项目依赖
  • pages文件夹:页面组件
  • static(public)文件夹:静态文件夹

页面

在nextjs中,页面是一个react组件,存放于pages文件夹下。

在构建时,nextjs会自动根据文件夹路径生成路由

预渲染

默认情况下,nextjs会预渲染每个页面,这意味着nextjs会预先生成html文件,而不是交由客户端通过JavaScript渲染。预渲染可以带来更好的性能和SEO。

服务端渲染

nextjs具有两种形式的渲染:静态生成和服务端渲染。这两种方式的不同之处在于为page页面生成html页面的时机。

  • 静态生成:HTML在构建时生成,并在每次页面请求时重用
  • 服务器端渲染:在每次页面请求时重新生成HTML

nextjs允许为每个页面选择渲染方式。

路由

nextjs路由有两种形式,声明式和命令式。分别是<link>标签和router组件。

动态路由

例如pages/post/[id].js会接受key为id的params

const router=useRouter()
const {id}=router.query

/[a]/[b].js会依次接受多个params

获取数据

getStaticProps

构建时请求数据

在构建阶段返回页面所需要的数据

如果是动态路由的页面,使用getStaticPaths方法来返回所有路由参数

getServerSideProps

每次访问时请求数据

只会在服务端运行,每次请求都运行一遍getServerSideProps

如果页面通过客户端Link组件导航而来,Next会向服务端发一个请求,然后再服务端运行getServerSideProps方法,然后返回JSON到客户端

CSS支持

在pages/_app.jsx中引入全局CSS

在组建中引入[name].module.css

通过classname=[name].xxx来确保样式不冲突