三篇短文让你学会 NextJS(一)

勾勾的前端世界

共 2828字,需浏览 6分钟

 ·

2020-12-10 15:28

嗨,我是你稳定更新、持续输出的勾勾。



NextJS 是一个用于生产环境的 React 框架,它可以提供生产环境所需的所有功能,开发体验极佳。


提供的功能包括静态及服务器端融合渲染、 支持 TypeScript、智能化打包、 路由预取等,无需任何配置。


也许你现在还没用到服务端渲染,当你需要的时候,不妨看看这篇文章。


# 基本介绍


谈到 NextJS,使用过的程序员无不为它点赞。对它的优点,官方总结如下:


  • 直观的、 基于页面的路由系统(并支持动态路由)

  • 预渲染。支持在页面级的静态生成 (SSG) 和服务器端渲染 (SSR)

  • 自动代码拆分,提升页面加载速度

  • 具有经过优化的预取功能的客户端路由

  • 内置 CSSSass 的支持,并支持任何 CSS-in-JS 库

  • 开发环境支持快速刷新

  • 利用 Serverless Functions 及API 路由构建 API 功能


今天我们先谈谈它路由,从两点下手:


  • 基于页面的路由系统

  • 动态路由


# 基于页面的路由系统


当我们准备使用 next 的时候,我们首先要安装 next react react-dom。

 npm install react react-dom next


当然官方也给了配置好的脚手架 create-next-app,我们先专注于从零开始。


安装完这三个依赖模块之后,我们去修改一下 next 的启动指令,在 package.json 下修改scripts的属性。

"scripts": {    "dev": "next",   //直接启动一个服务 它的构建在内存里执行    "build": "next build",//打包,当前目录下有.next文件,打包后的结果都在里面    "start": "next start"//启动服务  },


# 页面路由


在项目下创建一个 pages 的文件夹。这个文件夹必须叫 pages,不能起其它名称。


然后在 pages 下创建对应的组件,比如 index.js、about.js、lists.js、users.js 等等。

//index.jsimport React from "react"function Home(props){    console.log(props)    return (        <div>            <Head>                <title>index pagetitle>            Head>            <h3 className="h3">hello worldh3>            <img src="/01.jpg">img>            <style jsx>{`                .h3{                    color:skyblue;                }
`}style> div> )}export default Home;


当组件建成之后,我们依次在网址上输入 http://localhost:3000 || http://localhost:3000/about || http://localhost:3000/lists 等。


我们会发现根据 path 不同,展示的内容也不同。这就证实了 next 的路由是基于 pages 这个文件系统的。


# 动态路由


对于动态路由,前端小伙伴都很熟悉,那就是在 path 后面紧跟 id 或者 pid,比如 http://localhost:3000/users/1 那么这个 1 就是对应一个 id=1 的形式。我们就要根据用户输入的值来获取这个id 值。这里需要强调两个点:


  • 在 pages 下路由组件的写法


对于路由组件,我们需要以 [pid].js 的这种形式。当然 id 是自定义的,看你需要对路由参数设置什么值而定。


  • 在路由组件内的两个函数


1)getStaticPaths()


获取收集动态路由的所有方式。

//[pid].jsexport async function getStaticPaths() {  return {    paths: [      { params: { ... } } // See the "paths" section below    ],    fallback: true or false // See the "fallback" section below  }}


这里面的 paths 和 fallback 是两个必填项,需要严格按照这个格式来写。


2)getStaticProps()


引入了 getStaticPaths() 就必须引入 getStaticProps() 来接受路由的参数,示例代码如下:

//[pid].jsfunction Ha(props){    console.log(props)//{data:[12,23,34]}    return (        <div>
<h3>hello hahah3> div> )}export async function getStaticPaths() { return { paths: [ {params:{ pid:"1" }},{params:{pid:"2"}} // See the "paths" section below ], fallback: false // See the "fallback" section below }; }export async function getStaticProps({params}){ console.log("------",params) return {props:{data:[12,23,34]}}}


配置完成后,我们在 url 中输入http://localhost:3000/1 页面就能正常走路由页面了。


如果想实现 http://localhost:3000/posts/1 的这种形式,只需要建个文件夹 posts,把 [pid].js 扔到这个文件夹下就行。


做到这里,next 的路由系统就算是入门了。


推荐阅读:

React 下同构渲染的优化手段

React 下的同构渲染

手动实现一个自己的 React 服务端渲染

不会真的有人不知道 API 如何设计吧。

别再复制粘贴了!高效工作神器—— plop

API 终结者 —— 杀手 Reflect

前端人因为 Vue3 的 Ref-sugar 提案打起来了!

CRA 为什么要做成“黑盒”


点点“”和“在看”,保护头发,减少bug。

浏览 28
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报