中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

詳解基于vue的服務端渲染框架NUXT

發布時間:2020-09-03 22:01:22 來源:腳本之家 閱讀:218 作者:陽呀呀 欄目:web開發

Nuxt

隨著現在vue和react的流行,許多網站都做成了SPA,確實提升了用戶體驗,但SPA也有兩個弱點,就是SEO和首屏渲染速度。為了解決單頁應用的痛點,基于vue和react的服務端渲染應運而生。由于公司的框架采用的是vue,所以就簡單的研究了一下基于vue的服務端渲染框架——NUXT。在vue的官網有關于服務端渲染的詳細介紹,而NUXT集成了利用Vue開發服務端渲染的應用所需要的各種配置,也集成了Vue2、vue-router、vuex、vux-meta(管理頁面meta信息的),利用官方的腳手架,基本上是傻瓜式操作,不用寫路由配置,不用寫webpcak配置就可以跑起來一個基于服務端渲染的SPA。

Nuxt特性

NUXT的特性包括:

  1. 基于 Vue.js
  2. 自動代碼分層
  3. 服務端渲染
  4. 強大的路由功能,支持異步數據
  5. 靜態文件服務
  6. ES6/ES7 語法支持
  7. 打包和壓縮 JS 和 CSS
  8. HTML頭部標簽管理
  9. 本地開發支持熱加載
  10. 集成ESLint
  11. 列表項目
  12. 支持各種樣式預處理器: SASS、LESS、 Stylus等等

Nuxt目錄結構

通過vue init nuxt-community/starter-template <project-name>生成的文件目錄結構如下:

詳解基于vue的服務端渲染框架NUXT

其中有一些目錄(layouts、pages、static、store、nuxt.config.js、package.json)是Nuxt保留的,不可以更改,需要注意一下。

Nuxt路由

Nuxt中的一大特點就是路由無需手動配置,會根據pages下的文件路徑自動生成一套路由。如果路由中需要帶參數,只需將pages下的文件已下劃線_作為前綴即可。例如pages下的目錄結構如下:

pages/
--| user/
-----| index.vue
-----| one.vue
-----| _id.vue
--| index.vue

Nuxt自動生成的路由配置為:

router: {
 routes: [
  {
   name: 'index',
   path: '/',
   component: 'pages/index.vue'
  },
  {
   name: 'user',
   path: '/user',
   component: 'pages/user/index.vue'
  },
  {
   name: 'user-one',
   path: '/user/one',
   component: 'pages/user/one.vue'
  },
  {
   name: 'users-id',
   path: '/users/:id?',
   component: 'pages/users/_id.vue'
  },
 ]
}

而在vue文件中可以針對路由的參數進行校驗,例如在pages/users/_id.vue文件中

export default {
 validate ({ params }) {
  // Must be a number
  return /^\d+$/.test(params.id)
 }
}

如果校驗方法返回的值不為 trueNuxt 將自動加載顯示 404 錯誤頁面。而這個錯誤頁面需要寫在指定的位置,也就是layout中error頁面。接下來就來介紹有關視圖相關的東西。

Nuxt視圖

可以在layouts目錄下創建自定義的布局,可以通過更改 layouts/default.vue 文件來擴展應用的默認布局。需要在布局文件中添加 <nuxt/> 組件用于顯示頁面的主體內容,感覺跟vue中的slot方法類似。例如在默認布局中增加header和footer,這樣每個頁面都會加上header和footer。

<template>
 <div>
  <header>VUE SRR DEMO</header>
  <nuxt/>
  <footer>COPYRIGHT LXY</footer>
 </div>
</template>

而上面說到的error頁面,可以通過在layouts下增加error.vue文件來修改默認的錯誤頁面。該頁面可以接受一個error參數。

<template>
 <div class="container">
  <h2 v-if="error.statusCode === 404">頁面不存在</h2>
  <h2 v-else>應用發生錯誤異常</h2>
  <p class="goback">
   <nuxt-link to="/">返回首頁</nuxt-link>
  </p>
 </div>
</template>

<script>
export default {
 props: ['error'],
 layout: 'self-aside'
}
</script>

也可以給某個頁面指定特定的模板,做到個性化布局。例如在上面的error頁面中,我指定了一個self-aside的模板

以上所說的都是有關布局和路由相關的東西,而還沒有講到有關服務端渲染的知識,究竟 Nuxt 是如何做到SSR的呢,關鍵人物要出場了。

Nuxt asyncData 方法

Nuxt 擴展了 Vue.js,增加了一個叫 asyncData 的方法,使得我們可以在設置組件的數據之前能異步獲取或處理數據。這個函數可了不得了,有了它,我們可以先從服務員拿到數據,在服務端解析好,拼成HTML字符串,返回給瀏覽器。

asyncData方法會在組件每次加載之前被調用,它可以在服務端或路由更新之前被調用。 可以利用 asyncData方法來獲取數據,Nuxt 會將 asyncData 返回的數據融合組件 data 方法返回的數據一并返回給當前組件。這個方法只能用在頁面組件中,在componets下在公共組件是不能調用該方法的,Nuxt 不會擴展增強該目錄下 Vue 組件。

因為 asyncData 方法是在組件 初始化 前被調用的,所以在方法內是沒有辦法通過 this 來引用組件的實例對象。

async asyncData ({ params, error }) {
  const { data } = await axios.get('https://jsonplaceholder.typicode.com/users')
  return { 
   users: data.slice(0,5)
  }
 },

上面demo中asyncData返回的數據賦值給了users,這樣我就可以在頁面中像使用data里的數據一樣去使用users,例如我在template下循環出users

<ul>
  <li v-for="item in users" :key="item.name">{{item.name}}</li>
 </ul>

我現在去查看源代碼,發現頁面中li中的數據已經渲染過來了,也就是達到了服務端渲染。

詳解基于vue的服務端渲染框架NUXT

附一張Nuxt渲染的流程圖:

詳解基于vue的服務端渲染框架NUXT

總結

整體感覺Nuxt還是很好上手的,利用腳手架,看看官方文檔,寫寫demo,大致就能了解整個流程。但其中的具體實現細節,還需要去認真看看 https://ssr.vuejs.org/zh/

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持億速云。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

顺平县| 江山市| 德令哈市| 辽阳市| 芮城县| 云霄县| 华安县| 农安县| 开原市| 会昌县| 酒泉市| 蒲城县| 兰考县| 民丰县| 东乡县| 察雅县| 南昌市| 浦北县| 霍州市| 武汉市| 南投县| 宜宾县| 安塞县| 武山县| 西贡区| 田东县| 邛崃市| 平果县| 云和县| 定远县| 图们市| 乡城县| 寻乌县| 和林格尔县| 永福县| 黔南| 林周县| 故城县| 杂多县| 禹州市| 镇平县|