最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

關(guān)于react與vue中的key

之前在學(xué)習(xí)react的時(shí)候,常常遇到循環(huán)渲染組件時(shí)會(huì)提示需要在循環(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是必須的屬性,不然瀏覽器會(huì)拋出錯(cuò)誤提示
       return (<li key={item.id}>{item.name}</li>) 
      })
     }
     </ul>
    </div>
  )
 }
}

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

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

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

Vue中的key

同樣有一個(gè)vue的組件:

<template>
 <div>
  <ul>
   <!-- key是必須的屬性,不然瀏覽器會(huì)拋出錯(cuò)誤提示 -->
   <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,其實(shí)也類似,解釋key的作用,就不得不介紹一下虛擬DOM的diff算法了...算了,我也不是很懂
簡單理解就是react與vue內(nèi)部判斷組件的一個(gè)標(biāo)識(shí),用于更新或者重用組件的一個(gè)重要屬性

更新

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

重用

key用于組件重用:其實(shí)key不止是在map或者v-for中使用,我們也也可以在其他組件上使用這個(gè)屬性(至于哪個(gè)組件可以加,小孩子才做選擇,我們的目標(biāo)是全都加?。?當(dāng)然加了貌似也沒什么毛病,只是加了顯得有些多余!
在做SPA的時(shí)候,我們都會(huì)有一個(gè)主組件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>

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

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

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

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

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

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

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

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

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

嗯,前面好像廢話有點(diǎn)多,而且貌似有騙標(biāo)題的嫌疑,其實(shí)理解key這個(gè)屬性,對(duì)于解決頁面緩存,組件重復(fù)不相互影響有重要的作用。

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

相關(guān)文章

  • vue移動(dòng)端屏幕適配詳解

    vue移動(dòng)端屏幕適配詳解

    這篇文章主要介紹了vue移動(dòng)端屏幕適配,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-04-04
  • 前端vue3項(xiàng)目中百度地圖的使用api以及操作實(shí)例

    前端vue3項(xiàng)目中百度地圖的使用api以及操作實(shí)例

    最近項(xiàng)目要用到百度地圖api,好久沒用到地圖,就百度了一番,但是找了好幾篇文章,發(fā)現(xiàn)都沒辦法成功實(shí)現(xiàn),現(xiàn)將方法記錄如下,下面這篇文章主要給大家介紹了關(guān)于前端vue3項(xiàng)目中百度地圖的使用api以及操作實(shí)例,需要的朋友可以參考下
    2023-05-05
  • Vue和原生JS中如何使用自定義字體

    Vue和原生JS中如何使用自定義字體

    這篇文章主要為大家詳細(xì)介紹了Vue和原生JS中如何使用自定義字體,文中的示例代碼講解詳細(xì),具有一定的借鑒價(jià)值,感興趣的小伙伴可以了解下
    2024-01-01
  • 利用vue + koa2 + mockjs模擬數(shù)據(jù)的方法教程

    利用vue + koa2 + mockjs模擬數(shù)據(jù)的方法教程

    這篇文章主要給大家介紹了關(guān)于利用vue + koa2 + mockjs模擬數(shù)據(jù)的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧。
    2017-11-11
  • vue在mounted拿不到props中傳遞的數(shù)據(jù)問題

    vue在mounted拿不到props中傳遞的數(shù)據(jù)問題

    這篇文章主要介紹了vue在mounted拿不到props中傳遞的數(shù)據(jù)問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-03-03
  • vue部署包可配置后臺(tái)接口地址的方法

    vue部署包可配置后臺(tái)接口地址的方法

    這篇文章主要介紹了vue部署包可配置后臺(tái)接口地址的相關(guān)知識(shí),本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-03-03
  • element ui el-date-picker組件默認(rèn)值方式

    element ui el-date-picker組件默認(rèn)值方式

    這篇文章主要介紹了element ui el-date-picker組件默認(rèn)值方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-12-12
  • vue使用vuex實(shí)現(xiàn)首頁導(dǎo)航切換不同路由的方法

    vue使用vuex實(shí)現(xiàn)首頁導(dǎo)航切換不同路由的方法

    這篇文章主要介紹了vue使用vuex實(shí)現(xiàn)首頁導(dǎo)航切換不同路由的方法 ,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2019-05-05
  • antd配置config-overrides.js文件的操作

    antd配置config-overrides.js文件的操作

    這篇文章主要介紹了antd配置config-overrides.js文件的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2020-10-10
  • 詳解Vue3.x中組件間參數(shù)傳遞的示例代碼

    詳解Vue3.x中組件間參數(shù)傳遞的示例代碼

    在?Vue3.x?中,組件間的參數(shù)傳遞是構(gòu)建復(fù)雜應(yīng)用時(shí)不可或缺的一部分,無論是父子組件還是兄弟組件之間,合理的數(shù)據(jù)流動(dòng)都是保持應(yīng)用狀態(tài)一致性和可維護(hù)性的關(guān)鍵,本文將通過示例代碼,詳細(xì)介紹?Vue3.x?中組件間如何傳遞參數(shù),需要的朋友可以參考下
    2024-03-03

最新評(píng)論

鄯善县| 门源| 宁海县| 大关县| 拜城县| 西盟| 依兰县| 睢宁县| 枣强县| 沽源县| 平利县| 罗城| 二手房| 新乐市| 科技| 潼关县| 抚远县| 和田县| 新蔡县| 泽州县| 阳朔县| 瑞安市| 松潘县| 汉川市| 额敏县| 镇雄县| 五大连池市| 永昌县| 岳阳县| 化德县| 汉寿县| 银川市| 湖口县| 昌都县| 沂南县| 宜川县| 城市| 莆田市| 灵武市| 枣阳市| 黔南|