vuex的輔助函數(shù)

https://www.cnblogs.com/samve/p/10726629.html


vue:vuex中mapState拱雏、mapGetters、mapActions輔助函數(shù)及Module的使用

vue提供了注入機制,就是把我們的store 對象注入到根實例中。vue的根實例就是 new

Vue構(gòu)造函數(shù)儒拂,然后在所有的子組件中this.$store 來指向store 對象寸潦。在index.js 中,我們用export

store把store已經(jīng)暴露出去了社痛,然后直接在main.js中引入store并注入store即可见转。

// The Vue build version to load with the `import` command// (runtime-only or standalone) has been set in webpack.base.conf with an alias.importVuefrom'vue'importElementUIfrom'element-ui'import'element-ui/lib/theme-chalk/index.css'importAppfrom'./App'importrouterfrom'./router/router.js'importstorefrom'./store'importechartsfrom'echarts'


一、普通store中使用mapState蒜哀、mapGetters輔助函數(shù):

在src目錄下建立store文件夾:

?

index.js如下:

importVuefrom'vue';importVuexfrom'vuex';Vue.use(Vuex);conststate={//要設置的全局訪問的state對象showFooter:true,changableNum:0count:0//要設置的初始屬性值};constgetters = {//實時監(jiān)聽state值的變化(最新狀態(tài))isShow(state) {//方法名隨意,主要是來承載變化的showFooter的值returnstate.showFooter? },? getChangedNum(){//方法名隨意,主要是用來承載變化的changableNum的值returnstate.changebleNum? }};constmutations = {? show(state) {//自定義改變state初始值的方法斩箫,這里面的參數(shù)除了state之外還可以再傳額外的參數(shù)(變量或?qū)ο?;state.showFooter =true;? },? hide(state) {//同上state.showFooter =false;? },? newNum(state,sum){//同上,這里面的參數(shù)除了state之外還傳了需要增加的值sumstate.changableNum+=sum;? }};constactions = {? hideFooter(context) {//自定義觸發(fā)mutations里函數(shù)的方法撵儿,context與store 實例具有相同方法和屬性context.commit('hide');? },? showFooter(context) {//同上注釋context.commit('show');? },? getNewNum(context,num){//同上注釋校焦,num為要變化的形參context.commit('newNum',num)? }};conststore =newVuex.Store({? state,? getters,? mutations});exportdefaultstore;

vue提供了注入機制,就是把我們的store 對象注入到根實例中统倒。vue的根實例就是 new

Vue構(gòu)造函數(shù)寨典,然后在所有的子組件中this.$store 來指向store 對象。在index.js 中房匆,我們用export

store把store已經(jīng)暴露出去了耸成,然后直接在main.js中引入store并注入store即可。

// The Vue build version to load with the `import` command// (runtime-only or standalone) has been set in webpack.base.conf with an alias.importVuefrom'vue'importElementUIfrom'element-ui'import'element-ui/lib/theme-chalk/index.css'importAppfrom'./App'importrouterfrom'./router/router.js'importstorefrom'./store'importechartsfrom'echarts'Vue.config.productionTip =falseVue.use(ElementUI)Vue.use(echarts)Vue.prototype.$echarts = echarts/* eslint-disable no-new */newVue({el:'#app',? router,? store,components: { App },template:'<App/>'})

子組件中的computed屬性是根據(jù)它的依賴自動更新的浴鸿,所以只要store中的state發(fā)生變化井氢,它就會自動變化,在一般情況下子組件中獲取store中屬性的方式如下:

Count is {{某屬性}}

<script>

export default {

? computed: {

? count () {

? ? return this.$store.state.某屬性

? }

? }

}

</script>

通過computed屬性可以獲取到狀態(tài)值岳链,但是組件中每一個屬性(如:count)都是函數(shù)花竞,如果有10個,那么就要寫10個函數(shù)掸哑,且重復寫10遍return

this.$store.state不是很方便约急。vue 提供了mapState函數(shù),它把state直接映射到我們的組件中苗分。

當然使用mapState之前要先引入它厌蔽,它兩種用法,或接受一個對象摔癣,或接受一個數(shù)組奴饮,其中使用對象的方式又有三種方法。

對象用法如下:

import{mapState}from"vuex";// 引入mapState exportdefault{// 下面這三種寫法都可以computed: mapState({// 箭頭函數(shù)可使代碼更簡練count:state=>state.count,// 傳字符串參數(shù) 'count' 等同于 `state => state.count`countAlias:'count',// 為了能夠使用 `this` 獲取局部狀態(tài)择浊,必須使用常規(guī)函數(shù)countPlusLocalState (state) {returnstate.count +this.localCount? ? }? }) }

當映射的計算屬性的名稱與state的子節(jié)點名稱相同時戴卜,我們也可以給 mapState傳一個字符串數(shù)組。

import{mapState}from"vuex";exportdefault{computed: mapState([// 數(shù)組"count"]) }

如果我們組件內(nèi)部也有computed屬性怎么辦琢岩?它又不屬于mapState投剥,我們可以使用es6中的對象分割語法,把mapState函數(shù)生成的對象再分割成一個個的粘捎,就像最開始的時候我們一個一個羅列計算屬性薇缅,有10個屬性,我們就寫10個函數(shù)攒磨。

import{mapState}from"vuex";exportdefault{computed: {? ? ? ...mapState(["count"]),? ? ? getValue(){return1;? ? ? ? }? ? } }

二泳桦、Module中使用mapState、mapGetters娩缰、mapActions輔助函數(shù):

在src目錄下建立store文件夾:

?

其中:

collection.js

//collection.jsconststate={collects:['hi'],//初始化一個colects數(shù)組field:'空天作戰(zhàn)任務規(guī)劃'};constgetters={};constmutations={};constactions={};exportdefault{namespaced:true,//用于在全局引用此文件里的方法時標識這一個的文件名state,? getters,? mutations,? actions}

footerStatus.js:

//footerStatus.jsconststate={//要設置的全局訪問的state對象name:'beautiful',address:'Hunan Changsha',school:'國防科大',showFooter:true,changableNum:0//要設置的初始屬性值};constgetters = {//實時監(jiān)聽state值的變化(最新狀態(tài))};constmutations = {? changeSchool(state, value){? ? state.school = value;? }};constactions = {? _changeSchool(context, value){? ? context.commit('changeSchool', value)? }};exportdefault{namespaced:true,//用于在全局引用此文里的方法時標識這一個的文件名state,? getters,? mutations,? actions}

index.js:

importVuefrom'vue'importVuexfrom'vuex'importcollectionfrom'./modules/collection'importfooterStatusfrom'./modules/footerStatus'Vue.use(Vuex)exportdefaultnewVuex.Store({modules: {? ? collection,? ? footerStatus? }})

假如我們想在組件中使用module中的state灸撰、getters、mutations拼坎、actions浮毯,那該如何使用呢?

除了和普通store一樣需要在main.js中注入store外泰鸡,具體方法如下:

name: {{name}}

school: {{school}}

address: {{address}}

field: {{field}}

arrList: {{arrList}}

改變值

<script>

? import {mapState, mapGetters} from 'vuex'

? export default {

? ? data(){

? ? ? return {

? ? ? ? use: 'vuex高級使用方法'

? ? ? }

? ? },

? ? computed: {

? ? ? ...mapState({

? ? ? ? name: state => state.footerStatus.name,

? ? ? ? address(state){

? ? ? ? ? return state.footerStatus.address;

? ? ? ? }

? ? ? }),

? ? ? ...mapState('footerStatus', {

? ? ? ? school: 'school'

? ? ? }),

? ? ? ...mapState('collection', ['field']),

? ? ? _use(){

? ? ? ? this.use;

? ? ? },

? ? ? ...mapGetters('collection', {

? ? ? ? arrList: 'renderCollects'

? ? ? })

? ? },

? ? methods: {

? ? ? changeSchool(){

? ? ? ? this.$store.dispatch("footerStatus/_changeSchool", '北大');

? ? ? }

? ? }

? }

</script>

<style scoped>

</style>

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末债蓝,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子盛龄,更是在濱河造成了極大的恐慌饰迹,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,607評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件余舶,死亡現(xiàn)場離奇詭異啊鸭,居然都是意外死亡,警方通過查閱死者的電腦和手機匿值,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,239評論 3 395
  • 文/潘曉璐 我一進店門赠制,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人挟憔,你說我怎么就攤上這事钟些。” “怎么了绊谭?”我有些...
    開封第一講書人閱讀 164,960評論 0 355
  • 文/不壞的土叔 我叫張陵厘唾,是天一觀的道長。 經(jīng)常有香客問我龙誊,道長抚垃,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,750評論 1 294
  • 正文 為了忘掉前任趟大,我火速辦了婚禮鹤树,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘逊朽。我一直安慰自己罕伯,他們只是感情好,可當我...
    茶點故事閱讀 67,764評論 6 392
  • 文/花漫 我一把揭開白布叽讳。 她就那樣靜靜地躺著追他,像睡著了一般坟募。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上邑狸,一...
    開封第一講書人閱讀 51,604評論 1 305
  • 那天懈糯,我揣著相機與錄音,去河邊找鬼单雾。 笑死赚哗,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的硅堆。 我是一名探鬼主播屿储,決...
    沈念sama閱讀 40,347評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼渐逃!你這毒婦竟也來了够掠?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,253評論 0 276
  • 序言:老撾萬榮一對情侶失蹤茄菊,失蹤者是張志新(化名)和其女友劉穎祖屏,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體买羞,經(jīng)...
    沈念sama閱讀 45,702評論 1 315
  • 正文 獨居荒郊野嶺守林人離奇死亡袁勺,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,893評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了畜普。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片期丰。...
    茶點故事閱讀 40,015評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖吃挑,靈堂內(nèi)的尸體忽然破棺而出钝荡,到底是詐尸還是另有隱情,我是刑警寧澤舶衬,帶...
    沈念sama閱讀 35,734評論 5 346
  • 正文 年R本政府宣布埠通,位于F島的核電站,受9級特大地震影響逛犹,放射性物質(zhì)發(fā)生泄漏端辱。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,352評論 3 330
  • 文/蒙蒙 一虽画、第九天 我趴在偏房一處隱蔽的房頂上張望舞蔽。 院中可真熱鬧,春花似錦码撰、人聲如沸渗柿。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,934評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽朵栖。三九已至颊亮,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間陨溅,已是汗流浹背终惑。 一陣腳步聲響...
    開封第一講書人閱讀 33,052評論 1 270
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留声登,地道東北人。 一個月前我還...
    沈念sama閱讀 48,216評論 3 371
  • 正文 我出身青樓揣苏,卻偏偏與公主長得像悯嗓,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子卸察,可洞房花燭夜當晚...
    茶點故事閱讀 44,969評論 2 355

推薦閱讀更多精彩內(nèi)容

  • ### store 1. Vue 組件中獲得 Vuex 狀態(tài) ```js //方式一 全局引入單例類 // 創(chuàng)建一...
    蕓豆_6a86閱讀 730評論 0 3
  • 姓名:岳沁 學號:17101223458 轉(zhuǎn)載自:http://blog.csdn.net/h5_queensty...
    丘之心閱讀 2,146評論 0 1
  • 安裝 npm npm install vuex --save 在一個模塊化的打包系統(tǒng)中脯厨,您必須顯式地通過Vue.u...
    蕭玄辭閱讀 2,938評論 0 7
  • Vuex 是什么? Vuex 是一個專為 Vue.js 應用程序開發(fā)的狀態(tài)管理模式坑质。它采用集中式存儲管理應用的所有...
    skycolor閱讀 837評論 0 1
  • ### store 1. Vue 組件中獲得 Vuex 狀態(tài) ```js //方式一 全局引入單例類 // 創(chuàng)建一...
    蕓豆_6a86閱讀 345評論 0 0