问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

十分钟快速上手Next.js

发布网友 发布时间:2024-10-01 22:05

我来回答

1个回答

热心网友 时间:2024-10-14 09:28

前言

Next.js已经出来很久了,但是一直没机会看这个框架。

以前一直在用create-react-app来创建React项目,奈何CRA实在太难用了,今天花了点时间扫了一下Next.js的官网,发现用起来还挺简单的。

Next.js

虽然Next.js总被人称为SSR框架,其实Next.js还提供了很多功能,比如官网列出来的这些:

所以说,Next.js更像是一个框架,包含了路由、优化、SSR等一系列功能。

起步

和create-react-app一样,Next.js一样有个create-next-app的脚手架。

create-next-appdemo

使用上面命令后就可以创建一个Next.js框架的React项目。

路由

Next.js也提供了路由系统,采用名字约定路由

pages/index.js对应/

pages/xxx/first.js对应/xxx/first

使用Link组件来做路由跳转

functionFirstPost(){return(<><h1>FirstPost</h1><h2><Linkhref="/"><a>Backtohome</a></Link></h2></>)}

有的时候需要跳转到外链,可以使用<a>标签就可以。

静态资源

静态资源用的最多的就是图片了,Next.js提供了Image组件来替代img。

Image组件的好处就是可以提高网页加载图片的性能,可以自动按需加载,当图片进入视图时再加载图片。

除了相对路径引入,还可以将图片放在public/images/下,然后用“绝对路径”引入。

exportdefaultfunctionHome(){return(<><h1>MyHomepage</h1><Imagesrc="/profile.jpg"alt="Pictureoftheauthor"width={500}height={500}/><p>Welcometomyhomepage!</p></>)}MetaData

网页的MetaData主要是指<head>元素里的内容,Next.js直接提供了一个<Head>组件来包裹这些MetaData。

<Head><title>FirstPost</title></Head>

好处就是可以在不同的页面组件里写不同的MetaData。

CSS

样式这一块和create-react-app差不多,使用CSSmole,命名为xxx.mole.css就可以了,否则别的CSS文件都需要import'xxx.css'来引入CSS样式。

需要注意的是全局样式引入只能在pages/_app.js的根文件里引入。

上述操作Sass同理。

预渲染

终于来到Next.js最引以为豪的预渲染了。Next.js提供了三种渲染方式:

Client-sideRendering(CSR)

StaticGeneration(SSG)

Server-sideRendering(SSR)

Client-sideRendering

客户端渲染其实就是我们经常看到的前后端分离的场景了:只提供一个html,拿到<script>的JS再去渲染页面。

importuseSWRfrom'swr'functionProfile(){const{data,error}=useSWR('/api/user',fetch)if(error)return<div>failedtoload</div>if(!data)return<div>loading...</div>return<div>hello{data.name}!</div>}

由于需要等加载到JS再渲染页面,所以这种渲染方式的有以下缺点:

SEO不友好

白屏时间较长

聪明的前端程序员就想:当访问URL的时候,我直接把数据都放到HTML上,那爬虫就可以直接拿到页面的信息,解决SEO的问题了,同样的不需要等JS加载完再发Ajax获取数据了,基础数据优先展示,也就能解决白屏时间过长的问题了。

所以,预渲染说的就是SSG和SSR。

StaticGeneration

StaticGeneration会在buildtime的proction时候直接将数据写在HTML上,所以一般来说这些数据都是以静态、固定为主。

exportasyncfunctiongetStaticProps(){constallPostsData=getSortedPostsData()return{props:{allPostsData}}}

将getStaticProps这个函数export出来,里面则为buildtime时获取数据的逻辑。

Server-sideRendering

通常情况下,我们很少使用静态的数据,一般以动态数据为主,不可能每次数据更新了又要打包一遍。所以就有了Server-sideRendring。

Server-sideRendering则在每次请求这个URL的时候,都会执行一次数据获取并生成HTML返回给前端。

看到这里你可能会想Next.js和以前的PHP、JSP有什么区别么?都是吐HTML的呀。Next.js这里的SSR其实是同构渲染,即一套代码两端执行,具体区别请看这篇回答

和StaticGeneration类似,Server-sideRendering同样有一个对应的需要export出一个getServerSideProps函数。

exportasyncfunctiongetServerSideProps(context){return{props:{//propsforyourcomponent}}}动态路由

所谓动态路由就是可以生成posts/:id这样的路由,:id可以为post的id。文件命名只需要写成[id].js就可以了。

在页面组件文件里,可以通过前面说到的getStaticProps和getServerSideProps获取params:

exportasyncfunctiongetStaticProps({params}){constpostData=getPostData(params.id)return{props:{postData}}}

其中,pages/posts/[...id].js会匹配/posts/a/b路由和/posts/a,...为全匹配。

API

除了正常写页面外,有时候我们还需要提供API接口,可以在pages/api下添加文件,文件名则为API名。

注意:不能在getStaticProps和getStaticPaths里添加fetch数据,因为他们只在serverside运行,不会在clientside运行,应该使用helperfunction来获取数据。

API代码将不会在clientside的bundle里。

部署

部署这一块Next.js推荐使用Vercel来部署。

因为Vercel本身就是为Next.js服务的,所以只需要连上GithubRepo就可以一键部署了。

总结

稍微总结一下,Next.js提供的有如下功能:

Link组件,方便路由

Image组件,优化图片加载

文件路径生成路由机制,动态路由使用[id].js这样的命令

SSR、SSG的同构开发模式(其实就是export一个对应名字的函数,在里面提前获取数据就好了)

样式方面和create-react-app差不多

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
到4s店提新车注意事项和步骤是什么? 看到网吧了电脑桌面是动的,请问要怎么弄才可以把电脑桌面弄动起来~? 大型铸件加工厂家 山东浩信集团企业简介 孕妇梦见板栗什么意思 翻身训练的作用 云南中风偏瘫早期自我康复锻炼 实用偏瘫康复训练技术图解(第二版)详细介绍了哪些站起和站立训练方法... 松树扦插多久生根 松树扦插需要多长时间才能生根 松树扦插多久生根 买了外带的笔记本键盘用,会不会损伤到笔记本啊 笔记本外插键盘是否对笔记本有危害? ...JD MILK TEA SHOP SMART注册过商标吗?还有哪些分类可以注册... 禁毒手抄报最火的一句 调侃检察官的句子 咸鸭蛋怎么腌蛋黄才会出油 五羊本田小公主摩托车是什么牌子减震器 平安大/小福星20有缺点吗? 小女明年想考武汉外校高中,请问哪儿可找到近期外校考试卷 平安小福星保险怎么样,性价比高吗?值得入手吗? 天天水群是什么心理,有什么意义? 不良反应程度分级 网商银行贷款好申请吗 请问网商银行贷款条件有哪些啊? 发现新型冠状病毒感染的肺炎病人或疑似病人的报告时限是怎么规定的 手机密码锁忘记了。手机怎么才能开呢。能维修解锁吗? ...处理器512M内存,请问我的手机可以用平板电脑的用的QQ吗 联想平板电脑s5000如何视频聊天 ...不停的叫,不吃纸,打印不了,用的是EPSEN针式打印机LQ-630,这是何原 ... 针式打印机放纸把纸放进去,再按进纸就进不去一直滋这样转,别人就很轻... 请问最近我老公最近老在qq群那瞎聊天,说些带人嫖的话,又说自己是好人... 给前端同学看的跨平台游戏开发入门 老公搞群聊我生气了,现在回家不当我的面搞群聊了好吗 老公与女同学有群聊还要私聊我该怎么办?关键是老公知道那女人作风不正... 五行属土多子多福的朱姓女孩名字有哪些? 船舶与海洋工程专业是干嘛的 哪些大学开设了船舶与海洋工程专业 airpods有电总是蹬蹬蹬自己响 airpods总是自己蹬蹬蹬是怎么回事 airpods有电总是蹬蹬蹬自己响怎么回事呢? AirPods有电总是蹬蹬蹬自己响怎么回事? 越黄如何选择 右脚脚心痛什么原因 右脚脚心下面一点疼是什么原因 贝米钱包300元可以赚多少钱 右脚脚心酸痛怎么回事 500千瓦发电机一小时用多少柴油 - 知百科 500千瓦发电机组每小时多少油耗? 遇到政治漫画类试题,该怎么解 ...下图所示政治漫画《美国的噩梦》(图下部的文字为:AMERICA UNDER COMMU...