亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

說說Vuex的getters屬性的具體用法

 更新時(shí)間:2019年04月15日 10:17:32   作者:deniro_li  
這篇文章主要介紹了說說Vuex的getters屬性的具體用法,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧

什么是getters

在介紹state中我們了解到,在Store倉庫里,state就是用來存放數(shù)據(jù),若是對(duì)數(shù)據(jù)進(jìn)行處理輸出,比如數(shù)據(jù)要過濾,一般我們可以寫到computed中。但是如果很多組件都使用這個(gè)過濾后的數(shù)據(jù),比如餅狀圖組件和曲線圖組件,我們是否可以把這個(gè)數(shù)據(jù)抽提出來共享?這就是getters存在的意義。我們可以認(rèn)為,【getters】是store的計(jì)算屬性。

源碼分析

wrapGetters初始化getters,接受3個(gè)參數(shù),store表示當(dāng)前的Store實(shí)例,moduleGetters當(dāng)前模塊下所有的getters,modulePath對(duì)應(yīng)模塊的路徑

  function `wrapGetters` (store, moduleGetters, modulePath) {
   Object.keys(moduleGetters).forEach(getterKey => {
      // 遍歷先所有的getters
    const rawGetter = moduleGetters[getterKey]
    if (store._wrappedGetters[getterKey]) {
     console.error(`[vuex] duplicate getter key: ${getterKey}`)
      // getter的key不允許重復(fù),否則會(huì)報(bào)錯(cuò)
     return
    }
    store._wrappedGetters[getterKey] = function `wrappedGetter` (store{
      // 將每一個(gè)getter包裝成一個(gè)方法,并且添加到store._wrappedGetters對(duì)象中,
      return rawGetter(
       //執(zhí)行g(shù)etter的回調(diào)函數(shù),傳入三個(gè)參數(shù),(local state,store getters,rootState)
      getNestedState(store.state, modulePath), // local state
       //根據(jù)path查找state上嵌套的state 
      store.getters, 
        // store上所有的getters
      store.state 
         // root state)}}) 
   }
   
   //根據(jù)path查找state上嵌套的state 
  function `getNestedState` (state, path) {
     return path.length
      ? path.reduce((state, key) => state[key], state): state}  

1 應(yīng)用場(chǎng)景

假設(shè)我們?cè)?Vuex 中定義了一個(gè)數(shù)組:

const store = new Vuex.Store({
  state: {
    list:[1,3,5,7,9,20,30]
  }
 ...
})

業(yè)務(wù)場(chǎng)景希望過濾出大于 5 的數(shù)。馬上想到的方法可能的是:在組件的計(jì)算屬性中進(jìn)行過濾:

<template>
  <div>
    {{list}}
  </div>
</template>
<script>
  export default {
    name: "index.vue",
    computed: {
      list() {
        return this.$store.state.list.filter(item => item > 5);
      }
    }
 }
</script>

效果:

功能雖然實(shí)現(xiàn)了,但如果其它組件也需要過濾后的數(shù)據(jù),那么就得把 index.vue 中的計(jì)算過濾代碼復(fù)制出來。如果過濾規(guī)則發(fā)生變化,還得一一修改這些組件中的計(jì)算屬性,很難維護(hù)。這種場(chǎng)景下,我們就可以使用 getters 屬性啦O(∩_∩)O~

2 基礎(chǔ)用法

main.js:

const store = new Vuex.Store({
  state: {
    list: [1, 3, 5, 7, 9, 20, 30]
  },
  getters: {
    filteredList: state => {
      return state.list.filter(item => item > 5)
    }
  }
})

index.vue:

<script>
  export default {
    name: "index.vue",
    computed: {
      list() {
        return this.$store.getters.filteredList;
      }
    }
  }
</script>

效果達(dá)到了,而且只需要在一處維護(hù)過濾規(guī)則即可。

3 內(nèi)部依賴

getter 可以依賴其它已經(jīng)定義好的 getter。比如我們需要統(tǒng)計(jì)過濾后的列表數(shù)量,就可以依賴之前定義好的過濾函數(shù)。

main.js:

const store = new Vuex.Store({
  state: {
    list: [1, 3, 5, 7, 9, 20, 30]
  },
  getters: {
    filteredList: state => {
      return state.list.filter(item => item > 5)
    },
    listCount: (state, getters) => {
      return getters.filteredList.length;
    }
  }
})

index.vue:

<template>

  <div>
    過濾后的列表:{{list}}
    <br>
    列表長度:{{listCount}}
  </div>
</template>

<script>
  export default {
    name: "index.vue",
    computed: {
      list() {
        return this.$store.getters.filteredList;
      },
      listCount() {
        return this.$store.getters.listCount;
      }
    }
  }
</script>

效果:

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

相關(guān)文章

  • VUE?mixin?使用示例詳解

    VUE?mixin?使用示例詳解

    混入mixin提供了一種非常靈活的方式,來分發(fā)Vue組件中的可復(fù)用功能,一個(gè)混入對(duì)象可以包含任意組件選項(xiàng),接下來通過本文給大家介紹VUE?mixin?使用,需要的朋友可以參考下
    2022-08-08
  • vue.js實(shí)現(xiàn)插入數(shù)值與表達(dá)式的方法分析

    vue.js實(shí)現(xiàn)插入數(shù)值與表達(dá)式的方法分析

    這篇文章主要介紹了vue.js實(shí)現(xiàn)插入數(shù)值與表達(dá)式的方法,結(jié)合實(shí)例形式分析了vue.js常見的3種插入數(shù)值實(shí)現(xiàn)方式,并總結(jié)了vue.js插值與表達(dá)式相關(guān)使用技巧,需要的朋友可以參考下
    2018-07-07
  • vue實(shí)現(xiàn)tab欄點(diǎn)擊高亮效果

    vue實(shí)現(xiàn)tab欄點(diǎn)擊高亮效果

    這篇文章主要為大家詳細(xì)介紹了vue實(shí)現(xiàn)tab欄點(diǎn)擊高亮效果,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-08-08
  • vue項(xiàng)目中echarts自適應(yīng)問題的高級(jí)解決過程

    vue項(xiàng)目中echarts自適應(yīng)問題的高級(jí)解決過程

    雖然老早就看過很多echarts的例子,但自己接觸的項(xiàng)目中一直都沒有真正用到過,直到最近才開始真正使用,下面這篇文章主要給大家介紹了關(guān)于vue項(xiàng)目中echarts自適應(yīng)問題的高級(jí)解決過程,需要的朋友可以參考下
    2023-05-05
  • VUEJS 2.0 子組件訪問/調(diào)用父組件的實(shí)例

    VUEJS 2.0 子組件訪問/調(diào)用父組件的實(shí)例

    下面小編就為大家分享一篇VUEJS 2.0 子組件訪問/調(diào)用父組件的實(shí)例。具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2018-02-02
  • 詳細(xì)解讀VUE父子組件的使用

    詳細(xì)解讀VUE父子組件的使用

    這篇文章主要介紹了詳細(xì)解讀VUE父子組件的使用,今天來講一種子父組件深度耦合的方式,使我們不用額外的創(chuàng)建新的組件,也可以達(dá)到一些效果,下面與你們分享一下
    2023-05-05
  • Vue中使用Openlayer實(shí)現(xiàn)加載動(dòng)畫效果

    Vue中使用Openlayer實(shí)現(xiàn)加載動(dòng)畫效果

    這篇文章主要介紹了Vue+Openlayer加載動(dòng)畫效果的實(shí)現(xiàn)代碼,代碼簡(jiǎn)單易懂,對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-08-08
  • 你知道Vue中神奇的$set是如何實(shí)現(xiàn)的嗎?

    你知道Vue中神奇的$set是如何實(shí)現(xiàn)的嗎?

    在日常開發(fā)中,$set的也是一個(gè)非常實(shí)用的API。但是我們知其然更要知其所以然,接下來就跟隨小編一起看一下Vue中的$set是如何實(shí)現(xiàn)的吧
    2022-12-12
  • Vue監(jiān)聽localstorage變化的方法詳解

    Vue監(jiān)聽localstorage變化的方法詳解

    在日常開發(fā)中,我們經(jīng)常使用localStorage來存儲(chǔ)一些變量,這些變量會(huì)存儲(chǔ)在瀏覽中,對(duì)于localStorage來說,即使關(guān)閉瀏覽器,這些變量依然存儲(chǔ)著,方便我們開發(fā)的時(shí)候在別的地方使用,本文就給大家介紹Vue如何監(jiān)聽localstorage的變化,需要的朋友可以參考下
    2023-10-10
  • vant組件表單外部的button觸發(fā)form表單的submit事件問題

    vant組件表單外部的button觸發(fā)form表單的submit事件問題

    這篇文章主要介紹了vant組件表單外部的button觸發(fā)form表單的submit事件問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-06-06

最新評(píng)論