vuex是什么?
Vuex 是一個專為 Vue.js 應(yīng)用程序開發(fā)的狀態(tài)管理模式典勇。它采用集中式存儲管理應(yīng)用的所有組件的狀態(tài)劫哼,并以相應(yīng)的規(guī)則保證狀態(tài)以一種可預(yù)測的方式發(fā)生變化。下圖:
以上是一個表示“單向數(shù)據(jù)流”理念的示意圖割笙,View視圖上的用戶操作反應(yīng)到Actions上权烧,Actions改變數(shù)據(jù)源State,View以聲明的方式將state反映到視圖上伤溉。
注:在上篇文章中新建的vue工程的基礎(chǔ)上增加vuex功能
1.npm安裝Vuex
2.安裝 Vuex 之后般码,讓我們來新建一個store文件夾(這個不是必須的),并在文件夾下新建index.js文件乱顾,文件中引入我們的vue和vuex板祝。在一個模塊化的打包系統(tǒng)中,您必通過 Vue.use() 進(jìn)行引用:
這步操作結(jié)束走净,vuex就算引用成功了券时。
3.可以在main.js文件中在實(shí)例化 Vue對象時加入 store 對象孤里,這可以把store的實(shí)例注入所有的子組件中,如下圖所示:
4.現(xiàn)在我們看store文件夾下的index.js里需要怎么新建store橘洞。
如上圖所示捌袜,用export default 封裝代碼,可以讓外部引用炸枣。
當(dāng)store對象比較復(fù)雜時虏等,可以把store分割成模塊(module),import導(dǎo)入分割過得store适肠,在modules中引用霍衫。testStore就是分割過的store,現(xiàn)在我們testStore.js文件里增加一個常量對象state,加入一個改變state的方法changeCount侯养。
5.在components文件夾下新建一個vue的模板,名字叫test.vue敦跌。在模板中引入mapState, mapMutations, mapActions。
此時就可以運(yùn)行代碼沸毁,完成vuex的簡單使用峰髓,運(yùn)行結(jié)果如圖:
1就是testStore中的count值,點(diǎn)擊增加觸發(fā)Actions息尺,調(diào)用改變數(shù)據(jù)源state的方法changeCount使count值增加携兵,state的值反映到視圖上,相應(yīng)的1就會增加搂誉。
mapState
state對象賦值給內(nèi)部對象徐紧,也就是把stroe中的值,賦值給我們模板里data中的值炭懊,可以通過mapState的對象來賦值并级,首先要用import引入mapState,然后在computed計(jì)算屬性里寫如上代碼侮腹,使用ES6的箭頭函數(shù)來給count賦值嘲碧。
mapMutations
mutations是同步修改狀態(tài),在模板test.vue里用import 引入我們的mapMutations,在<\script>標(biāo)簽里添加methods屬性父阻,并加入mapMutations,引入mutations中的方法愈涩,就可以在button的click事件直接使用了。
mapActions
actions是異步修改狀態(tài)加矛,和mapMutations使用方式一樣履婉,在模板test.vue里用import 引入我們的mapActions,在<\script>標(biāo)簽里添加methods屬性,并加入mapActions,引入actions中的方法斟览,就可以在button的click事件直接使用了毁腿。