程序員都知道的 Vuex 的小技巧,超好用

當訪問某個數據項嵌套太深了,優化一下訪問的方式

在我的不斷嘗試中, 成功的發現了, vuex 其實有一個輔助函數 map 可以解決這個問題, 下面就把我總結到的語法分享給大家啦~ 希望可以幫到你

  1. mapState的使用步驟
// 1. 導入輔助函數mapState,它是在vuex中定義的一個工具函數。
//  es6 按需導入 import { mapState } from 'vuex' 
import { mapState } from 'vuex'

computed: {
   // 說明1:...對象 是把對象展開,合併到computed
   // 說明2:mapState是一個函數 
   //  ['數據項1', '數據項2']
   ...mapState(['xxx']),
   ...mapState({'新名字''xxx'})
}
複製代碼
  1. 使用
script:   this.xxx
模板:     {{xxx}}
複製代碼

圖示:

原理

  1. mapState 是輔助函數,將 vuex 中的數據投射到組件內部;

  2. computed:{...mapState() } 這裏的... 是對象的展開運算符,整體來看是對象的合併。

如果 vuex 中的數據與本組件內的數據名相同, 怎麼辦呢?

輔助函數 mapState 對數據重命名

...mapState({'新名字': 'xxx'})

## Vuex-map 函數用法彙總

使用全局 state

computed: { 
  // 省略其他計算屬性
  ...mapState(['xxx']), 
  ...mapState({'新名字''xxx'})
}
複製代碼

那如果是分模塊化呢? 如何使用 modules 中的 state?

圖示

computed: { 
  ...mapState('模塊名'['xxx']), 
  ...mapState('模塊名'{'新名字''xxx'})
}
複製代碼

使用全局 getters

computed: { 
  ...mapGetters(['xxx']), 
  ...mapGetters({'新名字''xxx'})
}
複製代碼

使用 modules 中的 getters

computed: { 
  ...mapGetters('模塊名'['xxx']), 
  ...mapGetters('模塊名',{'新名字''xxx'})
}
複製代碼

使用全局 mutations

methods: { 
  ...mapMutations(['mutation名']), 
  ...mapMutations({'新名字''mutation名'})
}
複製代碼

使用 modules 中的 mutations(namespaced:true)

methods: { 
  ...mapMutations('模塊名'['xxx']), 
  ...mapMutations('模塊名',{'新名字''xxx'})
}
複製代碼

使用全局 actions

methods: { 
  ...mapActions(['actions名']), 
  ...mapActions({'新名字''actions名'})
}
複製代碼

使用 modules 中的 actions(namespaced:true)

methods: { 
  ...mapActions('模塊名'['xxx']), 
  ...mapActions('模塊名',{'新名字''xxx'})
}
複製代碼
  • 如果 namespaced 爲 true,則需要額外去補充模塊名

  • 如果 namespaced 爲 false,則不需要額外補充模塊名

總結

關於本文

來自:你睡醒了嗎

https://juejin.cn/post/7097568476155838494

高級前端進階 網易 & 螞蟻前端,專注前端進階領域,已幫助無數前端跳槽漲薪。每日一題「Daily-Interview-Question」 Github 收穫近 25000 顆小星星,各公司面試官都在使用。接下來帶你走進高級前端的世界,在進階的路上,共勉!

本文由 Readfog 進行 AMP 轉碼,版權歸原作者所有。
來源https://mp.weixin.qq.com/s/0OtAXQaQKECFtnizQ9GakA