next.js极速入门

关于Next.js
next可以理解成服务端来渲染react应用,如同nuxt之于vue,next相对来说比nuxt更加优秀。

前置条件:

  1. 熟悉react;
  2. 熟悉前面博客文章写的nuxt;

话不多说,直接上才艺:

拉脚手架

npx create-next-app@latest
# or
yarn create next-app
# or
pnpm create next-app

按照控制台提示依次输入项目名称/是否使用ts/eslint代码检查,然后等待控制台执行完。

启动
npm run/pnpm/yarn dev

"scripts": {
  "dev": "next dev",
  "build": "next build",
  "start": "next start",
  "lint": "next lint"
}

目录结构
在这里插入图片描述
.next 启动或者构建生成的文件
components 公共组件库
pages 默认的路由页面,逻辑同nuxt,index.js为该目录的默认文件,[id]带路由参数的路由文件,新建的文件夹为新的路由等;
public 公共文件夹。相当于express/koa等配置的静态文件夹,里面的文件可以用相对路径/找到(比如public里有一个images文件夹且images文件夹里有一张logo.png图片,那么这张图片的路径可以写成/assets/logo.png)
styles 样式文件夹 需要注意的是next似乎只支持.module.css模块化的样式写法
模块化的样式写法是:
在这里插入图片描述
创建一个xx.module.css样式文件;
import styles from ‘这个module.css文件’
使用styles.样式名指定

需要注意的是import进来的样式是一个扁平化的对象(这句话的意思是假如你用了sass写的层级样式,import进来会自动扁平化成一层);所以我感觉sass之类的样式预处理一下子失去了灵魂。

pages里有一个_app.js文件,这个文件相当于所有路由视图文件公共的layouts,也就是说这个_app.js包裹了所有的路由视图文件,所以,你可以在这个地方放一些公共的样式/script脚本之类的东西。

路由跳转
通过next内置的一些组件自动跳转或者通过react-router跳转

点击链接跳转

import Link from 'next/link'
<Link href="/blog/hello-world">Blog Post</Link>
//携带参数
<Link
   href={{
     pathname: '/blog/[slug]',
     query: { slug: post.slug },
  }}
>
 xxx
</Link>

通过js跳转

import { useRouter } from 'next/router'
// 组件内部
const router = useRouter()

输出router 可以发现里面有这些方法
在这里插入图片描述
用它的push或者replace方法来路由跳转(感觉同vue-router);

数据请求
不需要服务端渲染的请求(也就是说客户端的请求)可以用任意的xmlhttprequest/fetch请求,不过官方还是推荐用swr 由于最近一段时间( 已经过去很久了) vercel部署的网站打不开,所以我就不演示了 官网有示例 npm也有

服务端请求

暴露一个getServerSideProps方法来告诉next需要服务端来请求数据。getServerSideProps内部进行请求并最终return给组件
举个栗子:
在这里插入图片描述
在getServerSideProps内部同步请求并return给组件的props,组件则可以通过props拿到其数据。
在服务端请求并渲染的好处是隐藏服务器的真实api接口,且用了该数据服务端会渲染好页面,利好seo。

需要注意的是getServerSideProps并非随意取的名字,不可随意取更改哦。如果是动态路由页面需要取参数,getServerSideProps函数有形参 输出形参或者直接输出arguments即可拿到那些动态数据(提示一下,getServerSideProps是运行在服务器端的,在这里输出可不会显示在浏览器F12的Console面板里哦,会打印在启动服务的控制台里);需要的路由参数就在query对象里。

还有个静态站点渲染请求getStaticProps 我就不说了 大家可以自己去看官方文档

页面Head信息
next有内置好多公共组件,其中有一个是head相关的。每一个页面 都可以有不同的标题啦,meta啦,script还有样式啦之类的东西。
通过import导入head组件

import Head from 'next/head';
// 组件内
<Head>
	<title>next 服务端渲染 demo</title>
	<!-- 其他的东西都可以写,会自动渲染到head标签里 -->
</Head>

此时页面的标题就是next 服务端渲染 demo

部署
参考这个 Linux 使用Nginx部署Next项目,并使用pm2进程守护

其他
next还内置好多好多组件 比如图片优化的Image import Image from 'next/image' 脚本加载Script import Script from 'next/script' 等等,需要了解的话看看官网文档

最后
补充一个我觉得next究极离谱的功能,我觉得是时候可以干掉 (不是)后台了;
在next里的pages文件夹下有一个api文件夹,这个是可以用来写接口的地方,不过这里面写好的接口不能用于getServerSideProps或者getStaticSideProp中调用,简言之就是说只能在客户端调用。(毕竟不管是getServerSideProps还是getStaticSideProp都是运行在node服务端滴 不会有跨域之类的影响)
如果想要回到由前端掌握的前后端项目不分离的时代,可以考虑直接使用next框架来开发(狗头保命)。

在这里插入图片描述

附一个写的demo:github地址; 线上预览(国内现在访问vercel部署项目需要翻墙了)vercel部署地址
以及官网文档地址

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值