nextjs進(jìn)階

nextjs 自定義app.js

作用:
固定layout
保持一些公用的狀態(tài)
給頁面?zhèn)魅胍恍┳远x數(shù)據(jù)
自定義錯誤處理

nextjs 自定義document.js

用途:
只有在服務(wù)端渲染的時候才會被調(diào)用,用來修改服務(wù)器渲染的文檔內(nèi)容,
一般用來配合第三方css-in-js方案使用

nextjs lazyLoading

A.getInitialProps = async ctx => {
//使用moment 時候才加載一個模塊
const moment = await import('moment')
const promise = new Promise((resolve) => {
  setTimeout(() => {
    resolve({
      name: 'thomas',
      time: moment.default(Date.now() - 60 * 1000).fromNow()
    })
  }, 1000);
})
return await promise
}

nextjs的配置項

const configs = {
  // 編譯文件的輸出目錄
  distDir: 'dest',
  // 是否給每個路由生成Etag
  generateEtags: true,
  // 頁面內(nèi)容緩存配置
  onDemandEntries: {
    // 內(nèi)容在內(nèi)存中緩存的時長(ms)
    maxInactiveAge: 25 * 1000,
    // 同時緩存多少個頁面
    pagesBufferLength: 2
  },
  // 在pages目錄下那種后綴的文件會被認(rèn)為是頁面
  pageExtensions: ['jsx', 'js'],
  // 配置buildId
  generateBuildId: async () => {
    if (process.env.YOUR_BUILD_ID) {
      return process.env.YOUR_BUILD_ID
    }
    // 返回null使用默認(rèn)的unique id
    return null
  },
  // 手動修改webpack config
  webpack(config, options) {
    return config
  },
  // 修改webpackDevMiddleware配置
  webpackDevMiddleware: config => {
    return config
  },
  // 可以在頁面上通過 process.env.customKey 獲取value
  env: {
    customKey: 'value'
  },
  // 下面?zhèn)z個要通過 ‘next/config’來讀取
  // 只有在服務(wù)端渲染時才會獲取的配置
  serverRuntimeConfig: {
    mySecret: 'secret',
    secondSecret: process.env.SECOND_SECRET
  },
  // 在服務(wù)端渲染和客戶端渲染都可獲取的配置
  publicRuntimeConfig: {
    staticFolder: '/static'
  }
}

nextjs ssr 流程

瀏覽器發(fā)起/page請求 => koa收到請求并且調(diào)用nextjs => nextjs開始渲染
=>調(diào)用 app的getInitialProps => 調(diào)用頁面的getInitialProps=>
渲染出最終html=>返回給瀏覽器=> end</br>

路由跳轉(zhuǎn)
點(diǎn)擊連接按鈕=>異步加載頁面組件 => 調(diào)用頁面的getInitialProps=>
數(shù)據(jù)返回路由變化=>渲染新的頁面

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容