摘要:原文鏈接完喜歡的歡迎作者簡介葉茂,蘆葦科技前端開發(fā)工程師,代表作品口紅挑戰(zhàn)網(wǎng)紅小游戲服務(wù)端渲染官網(wǎng)微信小程序粒子系統(tǒng)。擅長網(wǎng)站建設(shè)公眾號開發(fā)微信小程序開發(fā)小游戲公眾號開發(fā),專注于前端領(lǐng)域框架交互設(shè)計圖像繪制數(shù)據(jù)分析等研究。
title: next.js入門
tag:next.js, react 序章 服務(wù)端渲染服務(wù)端渲染(SSR: Server Side Rendering),html頁面由服務(wù)器渲染好,客戶端請求的是完整的html頁面。
egg,php,jsp等都是良好的服務(wù)端渲染技術(shù)。
seo優(yōu)化。
優(yōu)化首屏加載速度:相比加載單頁應(yīng)用,只需加載當(dāng)前頁面內(nèi)容,不用加載大量的js。
線上排查bug不能用瀏覽器控制臺查看數(shù)據(jù)流動。
不是前后端分離的最佳實踐。
SEO搜索引擎優(yōu)化(SEO:Search Engine Optimization),利用搜索引擎的規(guī)則提高網(wǎng)站在有關(guān)搜索引擎內(nèi)的自然排名。
為網(wǎng)站提供生態(tài)式的自我營銷解決方案,讓其在行業(yè)內(nèi)占據(jù)領(lǐng)先地位,獲得品牌收益。
SEO包含站外SEO和站內(nèi)SEO兩方面。
從網(wǎng)站結(jié)構(gòu)、內(nèi)容建設(shè)方案、用戶互動傳播、頁面等角度進行合理規(guī)劃,從搜索引擎獲得更多的免費流量。
安裝基于react,所以需要同時安裝react和react-dom
yarn next react react-dom --save
編寫package.json中的script字段
{ "scripts": { "dev": "next", "build": "next build", "start": "next start" } }目錄結(jié)構(gòu)
默認(rèn)情況下:
每個.js文件是一個路由。
./page是服務(wù)器的渲染索引
./static中的文件映射到/static/路由
編寫Hello World頁面編寫一個無狀態(tài)的頁面組件
// ./page/index.js var num = 1 num ++ console.log(num) function click () { console.log(num++) } export default () => (開發(fā)Hello Next.js)
yarn dev yarn dev -p 8080 // 指定端口號
運行以上hello world頁面可以看出,num在服務(wù)端終端和瀏覽器控制臺都輸出一次,單個js文件中的全局代碼是服務(wù)端和客戶端公用的代碼,一次在全局中處理純服務(wù)器邏輯可能會出錯,反之亦然。
點擊div可以打印出num,并且遞增,符合react組件邏輯。
獲取數(shù)據(jù)和組件生命周期服務(wù)端渲染一個常見的業(yè)務(wù)場景:獲取數(shù)據(jù)庫(或其他服務(wù)器)數(shù)據(jù),數(shù)據(jù)返回后再將其插入頁面中,生成完整頁面返回給客戶端。
前面說過這個邏輯不能寫在全局中,因為這里的代碼服務(wù)器和客戶端都會運行,并且這是一個異步過程,肯定要在一個異步函數(shù)、或回調(diào)函數(shù)中運行的邏輯。
getInitialProps頁面加載時,改方法只會在服務(wù)端執(zhí)行一次。
該方法只有在路由切換時,客戶端的才會被執(zhí)行。
改方法的返回值已props注入組件,在客戶端運行時可以獲取數(shù)據(jù)
getInitialProps方法的參數(shù)的屬性包含:
pathname - URL 的 path 部分
query - URL 的 query 部分,并被解析成對象
asPath - 顯示在瀏覽器中的實際路徑(包含查詢部分),為String類型
req - HTTP 請求對象 (只有服務(wù)器端有)
res - HTTP 返回對象 (只有服務(wù)器端有)
jsonPageRes - 獲取數(shù)據(jù)響應(yīng)對象 (只有客戶端有)
err - 渲染過程中的任何錯誤
import {Component} from "react" export default class App extends Component { static async getInitialProps(obj) { console.log(obj) console.log("where called") var fetch = (url) => { return new Promise((res, rej) => { res("獲取數(shù)據(jù)然后渲染") }) } let response = await fetch("/static/demo.json") console.log(response) return {response} } state = { num: 1 } add = () => { this.setState((state) => { return state.num++ }) } render () { return () } }{this.props.response}{this.state.num}
以上代碼運行后,getInitialProps方法在服務(wù)器執(zhí)行了,在服務(wù)端模擬了一次fetch請求,數(shù)據(jù)返回后渲染頁面。
可以在瀏覽器右鍵選擇“查看網(wǎng)頁源代碼”,查看從服務(wù)器傳到客戶端初始的html頁面的內(nèi)容。
以下是主要部分,可以看出數(shù)據(jù)是被預(yù)先渲染好的。
獲取數(shù)據(jù)然后渲染1
Next.js 支持 IE11 和所有的現(xiàn)代瀏覽器使用了@babel/preset-env。為了支持 IE11,Next.js 需要全局添加Promise的 polyfill。有時你的代碼或引入的其他 NPM 包的部分功能現(xiàn)代瀏覽器不支持,則需要用 polyfills 去實現(xiàn)。
polyfills默認(rèn)配置加入。
開發(fā)環(huán)境中使用es6的新api,Set等,這些新的api是造成低版本瀏覽器無法運行的根本原因。
next.js可以作為提高react應(yīng)用性能,優(yōu)化react應(yīng)用首屏加載速度的解決方案,時單頁應(yīng)用做seo優(yōu)化成為可能。
next.js提供的腳手架,開發(fā)環(huán)境搭建簡單,開發(fā)有‘熱更新’加持,開發(fā)極為舒服。
react本來就是構(gòu)建復(fù)雜應(yīng)用的框架,其大量使用es6特性,兼容性本來就差,next.js不是提高react應(yīng)用兼容性的解決方案。
原文鏈接
【完】 喜歡的歡迎 star && issue
作者簡介:葉茂,蘆葦科技web前端開發(fā)工程師,代表作品:口紅挑戰(zhàn)網(wǎng)紅小游戲、服務(wù)端渲染官網(wǎng)、微信小程序粒子系統(tǒng)。擅長網(wǎng)站建設(shè)、公眾號開發(fā)、微信小程序開發(fā)、小游戲、公眾號開發(fā),專注于前端領(lǐng)域框架、交互設(shè)計、圖像繪制、數(shù)據(jù)分析等研究。 一起并肩作戰(zhàn): [email protected] 訪問 www.talkmoney.cn 了解更多
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/104896.html
摘要:請考生務(wù)必妥善保管個人網(wǎng)報用戶名密碼及準(zhǔn)考證居民身份證等證件,避免泄露丟失造成損失。自主劃線院校會在月陸續(xù)公布初試成績基本要求。鎖定時間到達后,如招生單位未明確受理意見,鎖定解除,考生可繼續(xù)填報其他志愿。 ...
摘要:是基于圖畫,可視化數(shù)據(jù)工具。如圖更多的配置可以看官方的配置項手冊,每一項都有很詳細的說明。參考本地創(chuàng)建了文件用于儲存數(shù)據(jù)然后異步請求。因為使用的,所以引入了一個。使用的非常好用。 Echarts.js是基于canvas 圖畫,可視化數(shù)據(jù)工具。 Echarts官方案例 官網(wǎng)下載Echarts 然后引入官網(wǎng)下載Echarts.js ECharts 入門示例--柱...
摘要:附上個人簡歷小程序圖,做得怎么樣,大家可以微信掃描體驗下,多指教下。小程序開發(fā)資源匯總小程序開發(fā)框架在里面找了找,和比較火,畢竟是騰訊官方的開源,故我選擇了。 >>>點擊獲取更多文章
閱讀 1829·2021-09-22 15:54
閱讀 2940·2021-09-01 10:42
閱讀 3456·2019-08-30 15:56
閱讀 1448·2019-08-29 18:46
閱讀 2482·2019-08-29 10:57
閱讀 2721·2019-08-28 17:57
閱讀 3673·2019-08-23 18:14
閱讀 847·2019-08-23 17:03