一慷荔、第一個NextJS工程

一雕什、初識NextJS

1缠俺、NextJS簡介

Next.js 是一款基于 React 框架的輕量級服務(wù)端渲染框架显晶,支持csr、ssr壹士、isr磷雇、ssg等渲染方式。

2躏救、服務(wù)器端渲染

服務(wù)器端渲染主要解決的問題還是搜索引擎的seo優(yōu)化問題唯笙。如果你要開發(fā)的是一款博客、論壇之類提供資訊盒使、文章的軟件系統(tǒng)你就不得不考慮seo問題崩掘,搜索引擎本質(zhì)是爬蟲請求網(wǎng)頁鏈接,獲取服務(wù)器端返回的頁面數(shù)據(jù)后以一定規(guī)則剔除標(biāo)簽和腳本少办、樣式等干擾信息苞慢,解析其中有效文字內(nèi)容、超鏈接等(對于其中的超鏈接依據(jù)算法會決定是否繼續(xù)進(jìn)入深一層請求英妓,重復(fù)上述處理)挽放,分析后的數(shù)據(jù)绍赛,搜索引擎會決定是否收錄。

像vue辑畦、react之類打包發(fā)布的工程吗蚌,頁面返回的只剩下一個近乎空白的html頁面以及js、css鏈接纯出,對于seo來說有效的也就只有title和meta標(biāo)簽中內(nèi)容了蚯妇,這種工程核心數(shù)據(jù)通常都是js異步請求接口返回的,seo如果去分析js運行邏輯再模擬各種接口請求獲取返回信息暂筝,太復(fù)雜會大量浪費系統(tǒng)資源侮措,得不償失,相信通常情況下搜索引擎不會去這么干乖杠。

為了解決上述問題服務(wù)器端渲染又重新回到大眾視野分扎,為什么說“又重新回到”,因為在十幾年前服務(wù)器端渲染幾乎是唯一做web開發(fā)的架構(gòu)方式胧洒,在ajax還沒有成為主流的時代畏吓,所有數(shù)據(jù)都是在服務(wù)器端生成,做個文章翻頁都是一種折磨卫漫。全靠跳轉(zhuǎn)鏈接得到新數(shù)據(jù)菲饼,跳轉(zhuǎn)后再用各種頁面標(biāo)簽解析數(shù)據(jù),類似jstl/el表達(dá)式之類動態(tài)頁面標(biāo)簽技術(shù)列赎,若干年后富客戶端盛行宏悦,再發(fā)展慢慢變成了vue、react這種打包工程包吝,但是技術(shù)的發(fā)展卻和seo的運行機理背道而馳饼煞。一些需要考慮seo的產(chǎn)品需求,逼得開發(fā)人員不得不繼續(xù)沿用html诗越、jquery砖瞧、bootstrap這種傳統(tǒng)方式開發(fā)內(nèi)容系統(tǒng)。Next.js的服務(wù)器端渲染解決了這個棘手問題嚷狞,當(dāng)頁面啟用了服務(wù)器端渲染块促,使用瀏覽器的查看源碼功能,可以在源碼中搜索到文章標(biāo)題床未、鏈接等標(biāo)簽內(nèi)容竭翠,因此seo也就可以分析返回內(nèi)容進(jìn)行收錄了。后續(xù)我們將進(jìn)一步介紹服務(wù)器端渲染的細(xì)節(jié)原理薇搁。

3斋扰、準(zhǔn)備工作

本文基于next.js 13版本構(gòu)建,你的機器需要安裝Node.js 16.14或更新的版本。

4褥实、新建工程

zhb@bindeMacBook-Pro next_pro % npx create-next-app@latest my-app --typescript --tailwind --eslint

選項參考

? Would you like to use `src/` directory? … Yes
# 增加src源碼文件夾呀狼,源碼結(jié)構(gòu)會清晰一些,也可以不加這一層級
? Would you like to use App Router? (recommended) … Yes
? Would you like to customize the default import alias? … No
Creating a new Next.js app in /Users/binzhu/dev/next_pro/next-bbs.

5损离、默認(rèn)啟動頁

當(dāng)app/page.tsx文件存在時哥艇,此頁面將作為 http://localhost:3000 的默認(rèn)啟動頁面

6、啟動運行

cd my-app
npm run dev

7僻澎、頁面效果

瀏覽器中訪問:http://localhost:3000

iShot_2023-10-02_11.00.53.jpg

二貌踏、安裝組件庫

1、tailwind css簡介

與bootstrap功能類似窟勃,省去手寫css樣式屬性的煩惱祖乳,把樣式屬性封裝成了class,多個class可以自由組合實現(xiàn)頁面效果秉氧。更重要的還是提供響應(yīng)式支持眷昆。創(chuàng)建工程時已經(jīng)選擇了安裝tailwindcss所以這里不需要再單獨安裝。

2汁咏、shadcn/ui

(1) 介紹

基于radix-ui和tailwindcss構(gòu)建的組件庫亚斋,與以往組件庫的最大區(qū)別,shadcn/ui不是以npm方式發(fā)布的組件庫攘滩,而是以類似源碼方式下載組件帅刊,組件核心功能引用radix-ui,但是對于可自定義修改部分例如樣式等屬性都暴漏在組件源碼中漂问,方便使用者自定義修改赖瞒。以往發(fā)布式組件修改組件風(fēng)格的方式很有限通常只能改顏色風(fēng)格,shadcn/ui則靈活很多蚤假。同時大部分組件也支持服務(wù)器端渲染栏饮。打包體積更小,更加輕量化勤哗。

(2) 初始化

zhb@bindeMacBook-Pro next-bbs % npx shadcn-ui@latest init
Need to install the following packages:
  shadcn-ui@0.4.0
Ok to proceed? (y) y
? Would you like to use TypeScript (recommended)? … yes
? Which style would you like to use? ? Default
? Which color would you like to use as base color? ? Slate
? Where is your global CSS file? … app/globals.css
# 如果創(chuàng)建工程時選擇了use `src/` directory? … Yes這里要改成src/app/globals.css
? Would you like to use CSS variables for colors? … yes
? Where is your tailwind.config.js located? … tailwind.config.js
? Configure the import alias for components: … @/components
? Configure the import alias for utils: … @/lib/utils
? Are you using React Server Components? … yes
? Write configuration to components.json. Proceed? … yes

(3) 添加單個組件

npx shadcn-ui add [component]
# 示例
npx shadcn-ui add button

(4) 導(dǎo)入所有組件

通常按需單個組件導(dǎo)入即可抡爹,沒有必要一次導(dǎo)入全部

npx shadcn-ui add

(5) 目錄結(jié)構(gòu)

iShot_2023-10-03_14.25.43.jpg

三、安裝圖標(biāo)庫

npm install lucide

四芒划、最簡單的路由示例

新版本的nextjs支持兩種路由,原先的Pages Router欧穴,以及新增的App Router民逼,我們工程里都使用的App Router來做示例。App Router中文件夾層級目錄即為訪問鏈接層級路徑涮帘。

1拼苍、路由示例目錄結(jié)構(gòu)

iShot_2023-10-06_08.54.29.jpg

2、默認(rèn)訪問頁示例

app/layout.tsx

export default function RootLayout({
  children,
}: {
  children: React.ReactNode
}) {
  return (
    <html lang="en">
      <body>
        <div>src/app/layout.tsx框架</div>
        {children}
      </body>
    </html>
  )
}

app/page.tsx

export default function Home() {
  return (
    <div>Page Root</div>
  )
}

訪問地址:http://localhost:3000

頁面輸出結(jié)果如下:

src/app/layout.tsx框架
Page Root

3、第二層級頁面(無二級定義layout.tsx)

app/page1/page.tsx

export default function Page1() {
  return (
    <div>Page1</div> 
  )
}

訪問地址:http://localhost:3000/page1

頁面輸出結(jié)果如下:

src/app/layout.tsx框架
Page1

4疮鲫、第二層級頁面(存在二級定義layout.tsx)

(1)作用

如果子文件目錄中存在layout.tsx文件吆你,會逐級疊加頁面內(nèi)容

(2)頁面代碼

app/page2/layout.tsx

export default function Page2Layout({
  children,
}: {
  children: React.ReactNode
}) { 
  return (
    <>
      <div>src/app/page2/layout.tsx框架</div>
      {children}
    </>
  )
}

app/page2/page.tsx

export default function Page2() {
  return (
    <div>page2</div> 
  )
}

訪問地址:http://localhost:3000/page2

頁面輸出結(jié)果如下:

src/app/layout.tsx框架
src/app/page2/layout.tsx框架
page2

5、第三層級頁面

app/page2/page3/page.tsx

export default function Page2() {
  return (
    <div>page2</div> 
  )
}

訪問地址:http://localhost:3000/page2/page3

頁面輸出結(jié)果如下:

src/app/layout.tsx框架
src/app/page2/layout.tsx框架
page3

實際工程中更多的還是會使用到多個根布局的結(jié)構(gòu)俊犯,比如工程內(nèi)既有用戶入口頁面妇多,又存在管理后臺入口等情況,后續(xù)示例中將以multiple root layouts來構(gòu)建燕侠。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末者祖,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子绢彤,更是在濱河造成了極大的恐慌七问,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,907評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件茫舶,死亡現(xiàn)場離奇詭異械巡,居然都是意外死亡,警方通過查閱死者的電腦和手機饶氏,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,987評論 3 395
  • 文/潘曉璐 我一進(jìn)店門坟比,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人嚷往,你說我怎么就攤上這事葛账。” “怎么了皮仁?”我有些...
    開封第一講書人閱讀 164,298評論 0 354
  • 文/不壞的土叔 我叫張陵籍琳,是天一觀的道長。 經(jīng)常有香客問我贷祈,道長趋急,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,586評論 1 293
  • 正文 為了忘掉前任势誊,我火速辦了婚禮呜达,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘粟耻。我一直安慰自己查近,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 67,633評論 6 392
  • 文/花漫 我一把揭開白布挤忙。 她就那樣靜靜地躺著霜威,像睡著了一般。 火紅的嫁衣襯著肌膚如雪册烈。 梳的紋絲不亂的頭發(fā)上戈泼,一...
    開封第一講書人閱讀 51,488評論 1 302
  • 那天,我揣著相機與錄音,去河邊找鬼大猛。 笑死扭倾,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的挽绩。 我是一名探鬼主播膛壹,決...
    沈念sama閱讀 40,275評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼琼牧!你這毒婦竟也來了恢筝?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,176評論 0 276
  • 序言:老撾萬榮一對情侶失蹤巨坊,失蹤者是張志新(化名)和其女友劉穎撬槽,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體趾撵,經(jīng)...
    沈念sama閱讀 45,619評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡侄柔,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,819評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了占调。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片暂题。...
    茶點故事閱讀 39,932評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖究珊,靈堂內(nèi)的尸體忽然破棺而出薪者,到底是詐尸還是另有隱情,我是刑警寧澤剿涮,帶...
    沈念sama閱讀 35,655評論 5 346
  • 正文 年R本政府宣布言津,位于F島的核電站,受9級特大地震影響取试,放射性物質(zhì)發(fā)生泄漏悬槽。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,265評論 3 329
  • 文/蒙蒙 一瞬浓、第九天 我趴在偏房一處隱蔽的房頂上張望初婆。 院中可真熱鬧,春花似錦猿棉、人聲如沸磅叛。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,871評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽宪躯。三九已至,卻和暖如春位迂,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,994評論 1 269
  • 我被黑心中介騙來泰國打工掂林, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留臣缀,地道東北人。 一個月前我還...
    沈念sama閱讀 48,095評論 3 370
  • 正文 我出身青樓泻帮,卻偏偏與公主長得像精置,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子锣杂,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,884評論 2 354

推薦閱讀更多精彩內(nèi)容