欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Vue動態(tài)路由緩存不相互影響的解決辦法

 更新時間:2019年02月19日 10:49:18   作者:冬日夜已眠  
這篇文章主要介紹了Vue動態(tài)路由緩存不相互影響的解決辦法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧

關于react與vue中的key

之前在學習react的時候,常常遇到循環(huán)渲染組件時會提示需要在循環(huán)組件中加上key屬性,比如有一組列表:

import React, { Component } from 'react';

export default calss MainApp extends Component {
 state = {
  student: [
  {
   name: 'Jenny',
   id: 'a001'
  },
  {
   name: 'Jerry',
   id: 'a002'
  },
  ]
 }

 render() {
  return (
   <div>
     <ul>
     {
      this.state.student.map(item => {
       // key是必須的屬性,不然瀏覽器會拋出錯誤提示
       return (<li key={item.id}>{item.name}</li>) 
      })
     }
     </ul>
    </div>
  )
 }
}

可能對這個key不是太了解,或者也不許要太深入地去了解它,只知道在循環(huán)渲染組件時,隨手加上這個屬性就好。摘自網(wǎng)上的的文章的總結(jié),key的作用為

key的作用主要是為了高效的更新虛擬DOM

雖然不是很懂,但也裝作大切大悟的樣子。key是一個給框架內(nèi)部用的,我們只管給它加上去就好。

Vue中的key

同樣有一個vue的組件:

<template>
 <div>
  <ul>
   <!-- key是必須的屬性,不然瀏覽器會拋出錯誤提示 -->
   <li v-for="itme in student" :key={item.id}>{{item.name}}</li>
  </ul>
 </div>
</template>

<script>
import vue from 'vue';
import { Component } from 'vue-property-decorator'

@Component
export default calss MainApp extends vue {
 student = [
  {
   name: 'Jenny',
   id: 'a001'
  },
  {
   name: 'Jerry',
   id: 'a002'
  },
 ]
}
</script>

同樣的,回到vue中的key,其實也類似,解釋key的作用,就不得不介紹一下虛擬DOM的diff算法了...算了,我也不是很懂
簡單理解就是react與vue內(nèi)部判斷組件的一個標識,用于更新或者重用組件的一個重要屬性

更新

key用于更新:是框架內(nèi)部的算法實現(xiàn),一兩句話也說不清楚(主要是我也不懂這個算法),簡單理解為當數(shù)據(jù)更新了,框架內(nèi)部會判斷更新頁面哪些DOM元素需要更新刪除等操作;

重用

key用于組件重用:其實key不止是在map或者v-for中使用,我們也也可以在其他組件上使用這個屬性(至于哪個組件可以加,小孩子才做選擇,我們的目標是全都加!),當然加了貌似也沒什么毛病,只是加了顯得有些多余!
在做SPA的時候,我們都會有一個主組件App.vue:

<template>
 <div id="app">
  <div>
   <keep-alive>
    <router-view />
   </keep-alive>
  </div>
 </div>
</template>

<script>
import Vue from 'vue'
import { Component } from 'vue-property-decorator'

@Component
export default class MainApp extends Vue {
 
}
</script>

上面代碼會把頁面全部都緩存下來(路由切換回來的時候,頁面表單填寫的內(nèi)容沒有被清空),這是應為在<router-view />的外面包裹著keep-alive標簽, 頁面數(shù)據(jù)都保留下來了,避免用戶切換路由,數(shù)據(jù)丟失的情況,看似很完美!

比如一個產(chǎn)品頁面:

當兩個路由都使用同一個組件如Product.vue這個組件時,來回切換兩個路由,兩個頁面填寫的東西就會共用!切換頁面時,發(fā)現(xiàn)頁面自動填寫了上個頁面的東西,這并不是我們想要的!

如果頁面比較少, 比如只有A、B兩個產(chǎn)品,可以每個頁面都定義一個路由地址,并且name屬性不一樣的值:

{
 path: '/product',
 name: 'product',
 component: Product,
 children: [
  {
   path: 'a',
   name: 'aProduct',
   component: Detail
  },
  {
   path: 'b',
   name: 'bProduct',
   component: Detail
  },
 ]
}

這時這樣<router-view :key="$route.name"/>就解決上面的問題了

But,頁面較多的時候,定義路由就不能像上面這樣定義了:

{
 path: '/product',
 name: 'product',
 component: Product,
 children: [
  {
   path: 'detail/:id',
   name: 'aProduct',
   component: Detail
  },
 ]
}

此時路由變成了動態(tài)的了,那么,key就不能取name的值了,此時就需要引入一個變量來存儲路由的歷史記錄了,當路由切換時,在歷史記錄中匹配相應的路由,在歷史記錄中保存的一個位置值,取出來賦值個key就可以了

嗯,前面好像廢話有點多,而且貌似有騙標題的嫌疑,其實理解key這個屬性,對于解決頁面緩存,組件重復不相互影響有重要的作用。

以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

相關文章

  • vue中同時監(jiān)聽多個參數(shù)的實現(xiàn)

    vue中同時監(jiān)聽多個參數(shù)的實現(xiàn)

    這篇文章主要介紹了vue中同時監(jiān)聽多個參數(shù)的實現(xiàn)方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-04-04
  • 在JS中如何同步修改vue中的變量

    在JS中如何同步修改vue中的變量

    這篇文章主要介紹了在JS中如何同步修改vue中的變量問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-07-07
  • vue+uniapp實現(xiàn)生成二維碼

    vue+uniapp實現(xiàn)生成二維碼

    這篇文章主要為大家詳細介紹了vue結(jié)合uniapp實現(xiàn)生成二維碼的相關知識,文中的示例代碼講解詳細,具有一定的借鑒價值,感興趣的小伙伴可以學習一下
    2023-12-12
  • 詳解如何在Vue3使用<script lang=“ts“ setup>語法糖

    詳解如何在Vue3使用<script lang=“ts“ setup>語法糖

    本文主要介紹了在Vue3使用<script lang=“ts“ setup>語法糖,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2022-06-06
  • Vue3中實現(xiàn)選取頭像并裁剪

    Vue3中實現(xiàn)選取頭像并裁剪

    這篇文章主要詳細介紹了在vue3中如何選取頭像并裁剪,文章中有詳細的代碼示例,需要的朋友可以參考閱讀
    2023-04-04
  • 深入了解Vue使用vue-qr生成二維碼的方法

    深入了解Vue使用vue-qr生成二維碼的方法

    這篇文章主要為大家介紹了Vue使用vue-qr生成二維碼的方法,具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2021-12-12
  • Vue.js中的圖片引用路徑的方式

    Vue.js中的圖片引用路徑的方式

    當我們在Vue.js項目中引用圖片時,關于圖片路徑有以下幾種情形,下面通過本文給大家分享Vue.js中的圖片引用路徑的方式,感興趣的朋友一起看看吧
    2017-07-07
  • Vue vm.$attrs使用場景詳解

    Vue vm.$attrs使用場景詳解

    這篇文章主要介紹了vm.$attrs使用場景詳解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-03-03
  • vue動態(tài)設置頁面title的方法實例

    vue動態(tài)設置頁面title的方法實例

    這篇文章主要給大家介紹了關于vue動態(tài)設置頁面title的相關資料,文中通過實例代碼結(jié)束的非常詳細,對大家學習或者使用Vue具有一定的參考學習價值,需要的朋友們下面來一起學習學習吧
    2020-08-08
  • Vue中iframe?結(jié)合?window.postMessage?實現(xiàn)跨域通信

    Vue中iframe?結(jié)合?window.postMessage?實現(xiàn)跨域通信

    window.postMessage()?方法可以安全地實現(xiàn)跨源通信,在一個項目的頁面中嵌入另一個項目的頁面,需要實現(xiàn)父子,子父頁面的通信,對Vue中iframe?結(jié)合?window.postMessage?實現(xiàn)跨域通信相關知識感興趣的朋友跟隨小編一起看看吧
    2022-12-12

最新評論