1. 程式人生 > 實用技巧 >vueX基礎知識筆記

vueX基礎知識筆記

接著昨天的知識點

mutations提交時,有時候達不到想要的響應式,我們必須要將資料提前放到state中,否則不會達到響應式的效果。比如

state.info['address'] = value  //此方式,雖然通過devtools資料追蹤到已經新增資料,但是沒有渲染,沒有達到響應式,為解決這個問題我們可以這樣

vue.set($store.state.info,'address','beijing')  // 通過這樣我們就加了一個address:beijing的屬性,而且達到響應式

delete state.name      //此方式,雖然devtools資料已經刪除,但是渲染的地方不會消失,沒有達到響應式。這時

vue.delete($store.state,'name')  //這樣我們就將state中的name刪除了

下面我們介紹actions

從這樣圖中我們可以看出 元件--->用dispatch給actions--->actions通過commit---->mutations---->修改資料----->rander渲染元件,這是一個迴圈過程

然而mutations只接受同步操作,devtools工具才能追蹤到我們的資料,所以就有了actions,這是專門處理非同步操作的,通過元件使用dispatch給actions然後通

過actions中使用commit達到間接操作mutations的效果去修改資料。注意我們有一些非同步操作的時候,一定要按照流程走,否則devtools工具無法追蹤資料。

這裡有個小的知識點,就是當我們在actions進行非同步操作的時候,我們組建想要知道是否已經執行成功或者失敗,這時候我們可以返回一些資訊告知使用者

actions片段

aUpDate(context, pyload) {
return new Promise((resolve, reject) => {
setTimeout(() => {
context.commit("update", pyload)
console.log(pyload.message);
resolve('成功接收訊息')
}, 2000)
})
}

元件片段

 <button @click="change">change</button>

 change(){
this.$store.dispatch("aUpDate",{
message:"我是攜帶的資訊",
sucess:()=>{}
}).then((data)=>{
console.log(data);
})
}

看看程式碼能不能看懂?

用這個函式去返回一個promise物件,得到成功時的轉態resolve(‘成功接受訊息’),然後在元件後使用.then方法,並且答應resolve中攜帶的資訊。

這就是actions基本用法了

這時候就剩下我們的modules了,

哪什麼是modules呢?modules簡單的來說,它就是避免vuex中state中的資料隨著專案的逐漸變大,會顯得十分臃腫,所以就開闢了modules來分模組管理資料,modules中的每一個屬性就對應一個模組,每一個模組中包括state,mutations,getters,actions,modules說這麼多,那是怎麼分模組的呢?上程式碼可能會理解的更清楚

moduleA={
  state:{
    name:"kobe"
  },
  mutations:{},
  getters{},
  actions:{},
  modules:{}
}
new Vuex.store({
  state:{},
  mutations:{},
  getters{},
  actions:{},
  moudles{
    key1: moduleA
})

這樣是否是不是get到了一點呢?如果還沒有咱們再往下看吧

獲取資料

$store.state.key1.name  //就訪問到了moudelA中的name了

getters:

  1. 事件型別(state){return state.name}

  2. 事件型別(state,getters){return getters.事件型別}

  3. 事件型別 (state,getters,rootState){return rootState.name}

1. 返回moduleA中的name

2. 返回moduleA中getters中的事件型別

3. 返回根的state.name

(假設資料都存在,以上的例子)

mutations:

this.$store.commit("事件型別",pyload)  //給mutations

actions:

this.$store.dispatch("事件型別",pyload)  //給actions

actions:

事件型別(context,pyload){

  settimeout(()=>{

  context.commit("事件型別",pyload)  //給mutations

})

這樣就相當間接操作mutations去改變moudles中的state了

最後一個我們不要再解釋了吧,要是還要解釋,估計我得解釋一輩子。大家有什麼建議,隨時可以跟我留言哦,我們在學習的路上,可以互相學習,互相進

步。

}