上週有朋友問我vuex的問題,剛好上次做了一個獨立專案也需要用到,發現自己不會,於是去看官網API。看的一頭霧水,又是百度各種資料。然後自己敲程式碼,摸索了一下,最後知道大概意思了,ps:(本文只針對Vuex新手),如果你已經理解很透了,或是大神,就不適合你了。
先來看看官方的說法:
Vuex 是一個專為 Vue.js 應用程式開發的狀態管理模式。它採用集中式儲存管理應用的所有元件的狀態,並以相應的規則保證狀態以一種可預測的方式發生變化。
我的理解:就是把Vuex比作是前端的資料庫,用來存全域性的,公用的資料,然後提供獲取資料、修改資料對應的方法。
核心概念:(Store,state,Mutations,Mutation-type.js,Actions)我只對我目前能力範圍內用到的,Demo過的做講解一下,新手也好入手。
Store,就比作資料庫,裡面放資料(state),我要修改資料就用(Mutations)commit,修改的邏輯用(Action)這裡寫方法,也可以直接在mutations裡面直接修改,但是不能修改非同步的。
下面以我的專案為例:
本人專案框架目錄結構圖如下:
資料夾對應的名稱,
shendun:專案名稱,store:此資料夾就是用來放狀態管理池,我把它當做前端資料庫。
開始例項:
一:專案中找到main.js,並在根部注入store
store資料夾裡面的index.js引入了Vuex
到此Vuex就引入和註冊完成了。然後我開始在在state裡面放一個公用的資料
預設我在state.js裡面寫一個 testName:"xiaohong"的資料。
接下來我來修改這個資料,在Mutations.js裡面
說明:modifyName,是自己定義的方法名稱(此Demo是用來修改我們預設的定義好的testName),data是我們後修改需要傳進來的資料,state.testName就是我獲取state.js裡面定義好的初始化的資料。state.testName 輸出是"xiaohong"。
萬事具備了,接下來我到我需要用到的頁面去呼叫(indexIntroduceEntrance.vue),
在methods裡面定義一個方法“modify”,mounted() 裡面呼叫modify方法,並列印出我們的資料是否修改成功,我傳入的引數是“liuzhiqiang”。
看控制檯列印結果如圖:
textName由原來的"xiaohong",成功的修改為了"liuzhiqiang"。觸發方法我們用commit,如上圖this.$store.commit('modifyName',data),data是我們要出入的引數。
第二種方法,就是我們用mutation-types.js,這個js其實存的就是函式方法名稱的常量。
繼續上一個例項,
mutation-types.js裡面匯出一個常量 modifyName
mutations.js引入我們定義的常量
方法名稱用[modifyName]這樣既可,其他的不變
indexIntroduceEntrance.vue會有所變化如圖:
先要從Vuex引入mapMutations(輔助函式),methods 裡面解構...mapMutations(),方法呼叫直接是this.modify() 和原來的commit('modify')不同
控制檯輸出結果:
文章到此結束了,有問題或者不足錯誤的地方聯絡我或者給我留言
author:578557428@qq.com