Vuex在Vue組件中獲得Vuex狀態(tài)state的方法

Vuex使用單一狀態(tài)樹(一個對象就包含了全部的應用層級狀態(tài)),它作為唯一數(shù)據(jù)源存在,每個應用僅僅有一個store實例。

創(chuàng)新互聯(lián)-專業(yè)網(wǎng)站定制、快速模板網(wǎng)站建設、高性價比鎮(zhèn)賚網(wǎng)站開發(fā)、企業(yè)建站全套包干低至880元,成熟完善的模板庫,直接使用。一站式鎮(zhèn)賚網(wǎng)站制作公司更省心,省錢,快速模板網(wǎng)站建設找我們,業(yè)務覆蓋鎮(zhèn)賚地區(qū)。費用合理售后完善,十年實體公司更值得信賴。

單一狀態(tài)樹使得我們能夠直接定位任一特定的狀態(tài)片段,在調(diào)試過程中也能輕易地取得整個當前應用狀態(tài)的快照。

在Vue組件中獲得Vuex狀態(tài)

Vuex的狀態(tài)存儲是相應式的。在Vue組件中獲取Vuex狀態(tài)總共有 五種 可行的方法。

1.從store實例中讀取狀態(tài)最簡單的方法就是在計算屬性中返回某個狀態(tài):(需要導入store組件)

const Counter={
 template:`<div>{{ count }}</div>`,
 computed:{
 count(){
  return store.state.count//返回store實例的count狀態(tài)
 }
 }
}

每當store.state.count發(fā)生變化,都會重新求取計算屬性,并且出發(fā)更新相關聯(lián)的DOM

缺點:這種模式導致組件依賴全局狀態(tài)單例。在每個需要state的組件中需要頻繁地導入,并且在測試組件時需要模擬狀態(tài)。

Vuex通過store選項,提供了一種機制將狀態(tài)從根組件注入到每一個子組件中,前提是要調(diào)用Vue.use(Vuex)

const app=new Vue({
 el:'#app',
 store,//根組件通過store選項將store實例注入所有地子組件
 components:{ Counter },
 template:`
 <div class="app">
  <Counter><Counter>
 </div>
 `
})

上面的代碼能夠讓子組件通過this.$store訪問到store實例。

2.于是,Counter組件可以按照下面的實現(xiàn)來訪問store,而不用頻繁導入state的組件。

const Counter={
 template:`<div>{{ counter }}</div>`,
 computed:{
 count(){
  return this.$state.count
 }
 }
}

mapState輔助函數(shù)(用于獲取多個state狀態(tài))

當一個組件需要獲取多個狀態(tài)的時候,將這些狀態(tài)都聲明為計算屬性會有些重復和冗余(如上面代碼的count函數(shù)),避免這個問題,

3.我們可以用mapState輔助函數(shù)幫助我們生成計算屬性,讓我們少敲幾個?。?/strong>

import { mapState } from 'vuex'
export default{
 computed:mapState({
 //方式一:箭頭函數(shù)
 count:state => state.count,
 //方式二:傳字符串參數(shù)
 countAlias:'count',
 //如果要使用this獲取局部狀態(tài),就要使用常規(guī)函數(shù)了!
 countPlusLocalState(state){
 return state.count+this.localCount
 }
 })
}

4.如果映射的計算屬性的名稱與state的子節(jié)點相同時,我們給mapState傳一個字符串數(shù)組。

computed:mapState([
 'count'
])

5.對象展開運算符

上面的3、4都是mapState單獨使用在computed屬性中,但是如果要和普通的局部計算屬性混合使用的時候,我們用對象展開運算符(…)

import { mapState,mapGetter } from 'vuex'
export default{
 methods:{
 increment(){
  this.$store.commit('increment');
 }
 },
 computed:{
 elsecomputed(){},//這是普通的局部計算屬性
 ...mapGetters([
  'count'
 ]),
 ...mapState({
  counts(){
   return this.$store.state.count;
  }
  }
 })
 }
}

并不需要把所有狀態(tài)都放到Vuex,有些狀態(tài)嚴格屬于單個組件,最好是作為組件的局部狀態(tài),要根據(jù)應用開發(fā)進行權(quán)衡和確定。

以上這篇Vuex 在Vue 組件中獲得Vuex 狀態(tài)state的方法就是小編分享給大家的全部內(nèi)容了,希望能給大家一個參考,也希望大家多多支持創(chuàng)新互聯(lián)。

標題名稱:Vuex在Vue組件中獲得Vuex狀態(tài)state的方法
本文鏈接:http://www.muchs.cn/article40/piepeo.html

成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供定制網(wǎng)站、網(wǎng)站排名、網(wǎng)站策劃、App開發(fā)、外貿(mào)網(wǎng)站建設、網(wǎng)站改版

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)