簡單的理解Vuex,手把手教會

weixin_34166847發表於2018-08-01

上週有朋友問我vuex的問題,剛好上次做了一個獨立專案也需要用到,發現自己不會,於是去看官網API。看的一頭霧水,又是百度各種資料。然後自己敲程式碼,摸索了一下,最後知道大概意思了,ps:(本文只針對Vuex新手),如果你已經理解很透了,或是大神,就不適合你了。

先來看看官方的說法:

Vuex 是一個專為 Vue.js 應用程式開發的狀態管理模式。它採用集中式儲存管理應用的所有元件的狀態,並以相應的規則保證狀態以一種可預測的方式發生變化。

我的理解:就是把Vuex比作是前端的資料庫,用來存全域性的,公用的資料,然後提供獲取資料、修改資料對應的方法。

核心概念:(Store,state,Mutations,Mutation-type.js,Actions)我只對我目前能力範圍內用到的,Demo過的做講解一下,新手也好入手。

Store,就比作資料庫,裡面放資料(state),我要修改資料就用(Mutations)commit,修改的邏輯用(Action)這裡寫方法,也可以直接在mutations裡面直接修改,但是不能修改非同步的。

下面以我的專案為例:

本人專案框架目錄結構圖如下:

簡單的理解Vuex,手把手教會

資料夾對應的名稱,

shendun:專案名稱,store:此資料夾就是用來放狀態管理池,我把它當做前端資料庫。

開始例項:

一:專案中找到main.js,並在根部注入store

簡單的理解Vuex,手把手教會

store資料夾裡面的index.js引入了Vuex

簡單的理解Vuex,手把手教會

到此Vuex就引入和註冊完成了。然後我開始在在state裡面放一個公用的資料

預設我在state.js裡面寫一個 testName:"xiaohong"的資料。

簡單的理解Vuex,手把手教會

接下來我來修改這個資料,在Mutations.js裡面

簡單的理解Vuex,手把手教會

說明:modifyName,是自己定義的方法名稱(此Demo是用來修改我們預設的定義好的testName),data是我們後修改需要傳進來的資料,state.testName就是我獲取state.js裡面定義好的初始化的資料。state.testName  輸出是"xiaohong"。

萬事具備了,接下來我到我需要用到的頁面去呼叫(indexIntroduceEntrance.vue),

簡單的理解Vuex,手把手教會

在methods裡面定義一個方法“modify”,mounted() 裡面呼叫modify方法,並列印出我們的資料是否修改成功,我傳入的引數是“liuzhiqiang”。

看控制檯列印結果如圖:

簡單的理解Vuex,手把手教會

textName由原來的"xiaohong",成功的修改為了"liuzhiqiang"。觸發方法我們用commit,如上圖this.$store.commit('modifyName',data),data是我們要出入的引數。

第二種方法,就是我們用mutation-types.js,這個js其實存的就是函式方法名稱的常量。

繼續上一個例項,

簡單的理解Vuex,手把手教會

mutation-types.js裡面匯出一個常量 modifyName

mutations.js引入我們定義的常量

簡單的理解Vuex,手把手教會

方法名稱用[modifyName]這樣既可,其他的不變

indexIntroduceEntrance.vue會有所變化如圖:

簡單的理解Vuex,手把手教會

先要從Vuex引入mapMutations(輔助函式),methods 裡面解構...mapMutations(),方法呼叫直接是this.modify()  和原來的commit('modify')不同

控制檯輸出結果:

簡單的理解Vuex,手把手教會

文章到此結束了,有問題或者不足錯誤的地方聯絡我或者給我留言

author:578557428@qq.com






相關文章