watch實現監聽Vuex狀態監聽(利用computed)

Vuex 經過 store 選項,提供了一種機制將狀態從根組件「注入」到每個子組件中(需調用 Vue.use(Vuex)):經過在根實例中註冊 store 選項,該 store 實例會注入到根組件下的全部子組件中,且子組件能經過 this.$store 訪問到

computed: {
    f1() {
        return this.$store.state.xxxx
  }
},
watch: {
    f1(curVal, oldVal) {
          //這裏的curVal就是須要監聽的值
    }
 }

computed 裏通常寫個函數,這個函數裏必定是return一個結果。 這裏你能夠直接用f1做爲本組件監聽$store.state.xxxx, 也能夠在本組件裏聲明一個變量而後再經過watch監聽,將watch中的curVal賦值給該變量從而達到使用的目的。

當須要從vuex中獲取的變量特別可能是,可使用mapState代替

當一個組件須要獲取多個狀態時候,將這些狀態都聲明爲計算屬性會有些重複和冗餘。爲了解決這個問題,咱們可使用 mapState 輔助函數幫助咱們生成計算屬性,讓你少按幾回鍵:vue

// 在單獨構建的版本中輔助函數爲 Vuex.mapStatevuex

import { mapState } from 'vuex'

export default {
  // ...
  computed: mapState({
    // 箭頭函數可以使代碼更簡練
    count: state => state.count,

    // 傳字符串參數 'count' 等同於 `state => state.count`
    countAlias: 'count',

    // 爲了可以使用 `this` 獲取局部狀態,必須使用常規函數
    countPlusLocalState (state) {
      return state.count + this.localCount
    }
  })
}

當映射的計算屬性的名稱與 state 的子節點名稱相同時,咱們也能夠給 mapState 傳一個字符串數組。數組

computed: mapState([
  // 映射 this.count 爲 store.state.count
  'count'
])

對象展開運算符
mapState 函數返回的是一個對象。咱們如何將它與局部計算屬性混合使用呢?一般,咱們須要使用一個工具函數將多個對象合併爲一個,以使咱們能夠將最終對象傳給 computed 屬性。可是自從有了對象展開運算符(現處於 ECMAScript 提案 stage-4 階段),咱們能夠極大地簡化寫法:函數

computed: {
  localComputed () { /* ... */ },
  // 使用對象展開運算符將此對象混入到外部對象中
  ...mapState({
    // ...
  })
}

站在巨人的肩膀上摘蘋果:

連接:https://www.jianshu.com/p/b5365c05882b工具

相關文章
相關標籤/搜索