react服務端渲染next

2021-10-10 03:22:32 字數 4521 閱讀 8847

mkdir nextdemo

cd nextdemo

npm init -y

/** 配置package.json*/

"scripts"

:/** 啟動命令*/

npm run dev

或者yarn dev

/** 啟動命令 */

yarn dev

或者npm run dev

next缺省會自動給我們生成好路由,路由生成規則是在專案的根目錄下有pages資料夾,pages下檔案對應的路由就是資料夾+檔名的形式,比如pages下有乙個blog資料夾blog資料夾下有乙個header.js檔案,那麼next缺省會生成/blog/header路由

import link from

"next/link"

;"/">

去首頁<

/a>

<

/link>

import router from

"next/router"

;function

gotoheadpage()

>去首頁<

/button>

/** 傳遞引數的頁面pages/header/page1.js */

import link from

'next/link'

;import router from

"next/router"

;import

from

"next/router"

function

page()

})}return

(<

>

page1<

/div>

>

去首頁<

/a>

<

/link>

/**或者寫成**/

"/?name=首頁"

>

去首頁<

/a>

<

/link>

/** 函式式的寫法 **/

>去首頁<

/button>

<

/>)}

export

default page;

/** 接收引數的頁面pages/index.js **/

import

from

"next/router"

;const

header=(

)=>

<

/h1>

<

/>

}export

default

withrouter

(header)

;

getinitialprops

home.getinitialprops =

async()

=>).

then

((res)

=>);

});}

);return

await promise;

};

上述問題是因為nextjs更新之後造成的,需要採用以下方式進行:

import axios from

"axios"

;function

page

(props)

export

default page;

export

const getstaticprops =

async()

=>).

then

((res)

=>);

});return,}

;};/** next官方把那個棄用了 **/

這是page1<

/div>

"/?name=首頁"

>

去首頁<

/a>

<

/link>

>改變顏色<

/button>

} `

}<

/style>

<

/>);

}export

default pageone;

/** 以moment為例演示常規載入方式 **/

import react,

from

"react"

;import moment from

"moment"

;function

pageone()

return

(<

>

這是page1<

/div>

現在時間:

<

/p>

>更換時間格式<

/button>

<

/>);

}export

default pageone;

/** 以moment為例演示按需載入方式 **/

import react,

from

"react"

;function

pageone()

return

(<

>

這是page1<

/div>

現在時間:

<

/p>

>更換時間格式<

/button>

<

/>);

}export

default pageone;

/** 按需載入自己的元件 **/

import react,

from

"react"

;import moment from

"moment"

;import dynamic from

"next/dynamic"

;//引入next裡的這個方法

const page =

dynamic

(import

("./page2.js"))

;//進行懶載入

function

pageone()

return

(<

>

這是page1<

/div>

>

現在時間:

<

/p>

>更換時間格式<

/button>

<

/>);

}export

default pageone;

/** next提供的head元件 **/

import head from

"next/head"

;const

myheader=(

)=>

export defualt myheader;

//上面已經封裝好了乙個頁面的頭部資訊,可以在需要的頁面直接呼叫這個元件

由於next.js預設不支援css檔案的,它用的是style jsx,也就是說它是不支援直接import進行引入css的

@zeit/next-css它的主要功能就是讓next.js可以載入css檔案,有了這個包才可以進行配置。

/** 配置@zeit/next-css **/

//在根目錄下建立乙個next.config.js檔案,並輸入一下內容

const withcss =

require

('@zeit/next-css')if

(typeof require !==

'undefined')}

module.exports =

withcss

()

載入antd在我們打包的時候會把antd的所有包都打包進來,這樣會產生效能問題,讓專案載入變得非常的慢,現在的目的是指載入專案中用到的模組,這就需要用到babel-plugin-import。

/** 安裝babel-plugin-import **/

npm install babel-plugin-

import-s

/** 根目錄下穿件.babelrc檔案,寫入如下內容 **/]]

}

[外鏈轉存失敗,源站可能有防盜煉機制,建議將儲存下來直接上傳(img-cpfxnscx-1604122631830)(/users/wyh/desktop/版本.png)]

react服務端渲染框架

客戶端渲染 載入乙個空的html頁面,然後請求乙個打包的js檔案,然後再客戶端執行這個js檔案 動態生成html內容然後插入到dom元素上,在源 查詢中也只能看到空的html文件 沒有任何其他內容 服務端渲染 載入出來的就帶有完整的html文件內容 同時帶有資料 流程 瀏覽器傳送請求 伺服器端執行r...

react服務端渲染(同構)

學習react也有一段時間了,使用react後首頁渲染的速度與seo一直不理想。打算研究一下react神奇服務端渲染。react服務端渲染只能使用nodejs做服務端語言實現前後端同構,在後台對react元件進行解析並生成html字串後返回檢視頁面。後台為什麼可以解析react元件?因為node j...

React 服務端渲染的流程簡述

做 react ssr 有一段時間了,在正好在這裡分享一下.使用者第一次請求 重新整理頁面時,由服務端響應.伺服器響應的是乙個已經插入了元件文字的模板 template with pre populated component 由於響應的頁面已經有元件的 html 文字,可以省去瀏覽器端首次渲染的工...