為什么使用vuex?
vuex主要是是做數據交互,父子組件傳值可以很容易辦到,但是兄弟組件間傳值(兄弟組件下又有父子組件),或者大型spa單頁面框架項目,頁面多並且一層嵌套一層的傳值,異常麻煩,用vuex來維護共有的狀態或數據會顯得得心應手。
需求:兩個組件A和B,vuex維護的公共數據是 餐館的名稱 resturantName,默認餐館名稱是 飛歌餐館,那么現在A和B頁面顯示的就是飛歌餐館。如果A修改餐館名稱 為 A餐館,則B頁面顯示的將會是 A餐館,反之B修改同理。這就是vuex維護公共狀態或數據的魅力,在一個地方修改了數據,在這個項目的其他頁面都會變成這個數據。
①首先新建一個 sotre文件夾,分開維護 actions mutations getters
②在index.js文件中新建vuex 的store實例
*as的意思是 導入這個文件里面的所有內容,就不用一個個實例來導入了。
③在main.js中導入 store實例
④在組件A中,定義點擊事件,點擊 修改 餐館的名稱,並把餐館的名稱在事件中用參數進行傳遞。
...mapactions 和 ...mapgetters都是vuex提供的語法糖,在底層已經封裝好了,拿來就能用,簡化了很多操作。
其中...mapActions(['clickAFn'])
相當於this.$store.dispatch('clickAFn',{參數}),
mapActions中只需要指定方面即可,參數省略。
...mapGetters([
'resturantName'
])相當於
this
.$store.getters.resturantName
B組件同理
⑤actions中的操作,為了方便理解,ES6的箭頭函數換成了比較好理解的函數,commit提交到mutations中
⑥mutations,mutations值所有vuex步驟中唯一能改變數據的操作,在其他步驟修改都是非法的。
在此步驟中,把組件中傳遞過來的 餐館名稱賦值給了vuex共同維護的狀態 resturantName,這時所有的resturantName都變成了餐館A
⑦在getter中獲取最終的狀態
⑧在計算屬性中,渲染最終的數據 resturantName
轉載自:https://www.jb51.net/article/134853.htm