Next.js使用getServerSideProps進(jìn)行服務(wù)器端渲染demo
正文
服務(wù)器端渲染試圖在提供網(wǎng)站之前將你的網(wǎng)頁盡可能多地轉(zhuǎn)換為靜態(tài)HTML。這意味著像調(diào)用API這樣的事情,不是在你瀏覽頁面時(shí)發(fā)生在客戶端,而是在服務(wù)器上,在頁面被提供之前發(fā)生。
在Next.js中,任何同時(shí)導(dǎo)出getServerSideProps函數(shù)的頁面都會在對該頁面提出請求時(shí)調(diào)用該函數(shù)。然后你可以在該函數(shù)中返回道具,然后將其傳遞給頁面。
為什么使用SSR?
SSR讓你提供靜態(tài)的HTML,而不是在客戶端使用JavaScript來創(chuàng)建你的頁面。這樣做的好處是:
- 你的頁面會加載得更快,因?yàn)榘拇笮「?,而且你已?jīng)獲取了你需要的任何數(shù)據(jù)。這對連接速度較慢的人來說特別有幫助。
- 它使谷歌等搜索引擎更容易對你的網(wǎng)站進(jìn)行索引和抓取,因?yàn)樗皇庆o態(tài)HTML。
- 你可以在你的應(yīng)用程序中使用服務(wù)器端的代碼,因?yàn)檫@些代碼不會在客戶端。
getServerSideProps
這里有一個(gè)例子,它使用隨機(jī)事實(shí)API,在請求時(shí)檢索一個(gè)隨機(jī)事實(shí)。為了好玩,讓我們也使用查詢字符串參數(shù)來控制我們獲取的事實(shí)數(shù)量。我還加入了對os模塊的使用,它從我的電腦上獲取了我的用戶名。這只有在代碼在服務(wù)器上運(yùn)行時(shí)才能實(shí)現(xiàn)。
下面是一個(gè)使用axios的簡單的取值函數(shù)。你可以忽略其中的內(nèi)容,重要的是我們得到的只是一個(gè)包含我們的事實(shí)的簡單JSON對象。如果你想了解更多關(guān)于axios的信息,請查看我們的這篇文章:
function fetchFact() { //Just a simple get request which gets back a fact in a JSON object return axios .get('https://uselessfacts.jsph.pl//random.json?language=en') .then((res) => { return res.data; }); }
然后,我們有了我們的頁面組件。這只是顯示我們的道具,用TailwindCSS做了一點(diǎn)花哨的造型:
export default function SSRExample({ name, facts }) { console.log('Hi from the client!'); return ( <div className="flex h-screen w-screen flex-col items-center justify-center bg-white text-3xl text-white"> <p className="mb-10 rounded bg-neutral-800 p-10"> Heres some fun facts from {name} </p> <ul className="flex max-w-2xl flex-col gap-5 rounded bg-neutral-800 p-10 shadow"> {facts.map(({ id, text }) => ( <li key={id}>{text}</li> ))} </ul> </div> ); }
這里是我們的getServerSideProps,用來獲取數(shù)據(jù):
export async function getServerSideProps({ query }) { const { count } = query; const promises = [...new Array(Number(count))].map(() => fetchFact()); const facts = await Promise.all(promises); const name = os.userInfo().username; //console.log(facts); console.log('Hi from the server!'); console.log('Count:', count); console.log('Username:', name); console.log('Facts:', facts); return { props: { name, facts, }, }; }
這就是它的模樣!
如果我們檢查我們的控制臺,getServerSideProps只在服務(wù)器上運(yùn)行,所以我們看到了服務(wù)器上的日志,而不是我們組件中的日志。在客戶端,我們得到了相反的結(jié)果,代碼被剝離出來,我們只看到我們組件的日志。
開發(fā)服務(wù)器控制臺
Chrome開發(fā)工具控制臺
希望這是對Next.js中SSR的快速介紹。Next.js還支持另一種預(yù)渲染,即使用靜態(tài)網(wǎng)站生成,你可以在這里查看更多相關(guān)信息,更多關(guān)于Next.js getServerSideProps的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
微信小程序?qū)崿F(xiàn)獲取小程序碼和二維碼java接口開發(fā)
這篇文章主要介紹了微信小程序?qū)崿F(xiàn)獲取小程序碼和二維碼java接口開發(fā),小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2019-03-03理解Javascript_09_Function與Object
在《理解Javascript_08_函數(shù)對象》中講解了很多函數(shù)對象的問題,同時(shí)也留下了許多疑問,今天讓我們來解答部分問題。2010-10-10Bootstrap開發(fā)實(shí)戰(zhàn)之響應(yīng)式輪播圖
這篇文章主要為大家詳細(xì)介紹了Bootstrap開發(fā)實(shí)戰(zhàn)之響應(yīng)式輪播圖,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2016-06-06JS日期對象簡單操作(獲取當(dāng)前年份、星期、時(shí)間)
這篇文章主要介紹了JS日期對象簡單操作,獲取當(dāng)前年份、星期、時(shí)間等代碼,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2016-10-10JavaScrip數(shù)組刪除特定元素的幾種方法總結(jié)
從js數(shù)組中刪除指定元素是我們每個(gè)人都遇到的問題,網(wǎng)上這方面的資料也很多,但有的時(shí)間過于久遠(yuǎn),有的內(nèi)容不夠全面,所以自己來整理下,這篇文章主要給大家總結(jié)介紹了關(guān)于JavaScrip數(shù)組刪除特定元素的多種方法,需要的朋友可以參考下。2017-09-09Peer.js 構(gòu)建視頻聊天應(yīng)用使用詳解
這篇文章主要為大家介紹了Peer.js 構(gòu)建視頻聊天應(yīng)用使用詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-03-03js 將input框中的輸入自動轉(zhuǎn)化成半角大寫(稅號輸入框)
本文主要介紹了稅號輸入框:將input框中的輸入自動轉(zhuǎn)化成半角大寫的方法,具有很好的參考價(jià)值,下面跟著小編一起來看下吧2017-02-02上傳文件返回的json數(shù)據(jù)會被提示下載問題解決方案
這篇文章主要介紹了項(xiàng)目中python+js實(shí)現(xiàn)的上傳文件返回的json數(shù)據(jù)會被提示下載問題解決方案,需要的朋友可以參考下2014-12-12