當需要從vuex中獲取的變數特別多是,可以使用mapState代替 當一個組件需要獲取多個狀態時候,將這些狀態都聲明為計算屬性會有些重覆和冗餘。為瞭解決這個問題,我們可以使用 mapState 輔助函數幫助我們生成計算屬性,讓你少按幾次鍵: // 在單獨構建的版本中輔助函數為 Vuex.mapSta ...
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 輔助函數幫助我們生成計算屬性,讓你少按幾次鍵:
// 在單獨構建的版本中輔助函數為 Vuex.mapState
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