actions
Vuex'te eşzamansızdır. Çağıran işlevin (eylemin başlatıcısı) bir eylemin tamamlandığını bilmesine izin vermenin tek yolu, bir Söz vermek ve daha sonra çözümlemektir.
İşte bir örnek: a myAction
döndürür Promise
, bir http çağrısı yapar ve Promise
sonrasını çözer veya reddeder - tümü eşzamansız olarak
actions: {
myAction(context, data) {
return new Promise((resolve, reject) => {
// Do something here... lets say, a http call using vue-resource
this.$http("/api/something").then(response => {
// http success, call the mutator and change something in state
resolve(response); // Let the calling function know that http is done. You may send some data back
}, error => {
// http failed, let the calling function know that action did not work out
reject(error);
})
})
}
}
Şimdi, Vue bileşeniniz başladığında, myAction
bu Promise nesnesini alacak ve başarılı olup olmadığını bilebilir. Vue bileşeni için bazı örnek kodlar:
export default {
mounted: function() {
// This component just got created. Lets fetch some data here using an action
this.$store.dispatch("myAction").then(response => {
console.log("Got some data, now lets show something in this component")
}, error => {
console.error("Got nothing from server. Prompt user to check internet connection and try again")
})
}
}
Yukarıda görebileceğiniz gibi, actions
a döndürmek oldukça faydalıdır Promise
. Aksi takdirde, eylem başlatıcının ne olduğunu ve işlerin kullanıcı arayüzünde bir şey gösterecek kadar kararlı olduğunu bilmesinin bir yolu yoktur.
Ve ile ilgili son bir not mutators
- haklı olarak belirttiğiniz gibi, bunlar eşzamanlıdır. İçindeki şeyleri değiştirirler state
ve genellikle den çağrılırlar actions
. Karıştırmak için gerek yoktur Promises
ile mutators
olduğu gibi, actions
bu kısmı sapın.
Düzenleme: Tek yönlü veri akışının Vuex döngüsü hakkındaki görüşlerim:
Verilere this.$store.state["your data key"]
bileşenlerinizdeki gibi erişirseniz , veri akışı tek yönlüdür.
Eylemden gelen vaat, yalnızca bileşenin eylemin tamamlandığını bilmesini sağlamaktır.
Bileşen, yukarıdaki örnekteki vaat çözümleme işlevinden veri alabilir (tek yönlü değildir, bu nedenle önerilmez) veya doğrudan $store.state["your data key"]
tek yönlü olup vuex veri yaşam döngüsünü izler.
Yukarıdaki paragraf Vue.set(state, "your data key", http_data)
, eyleminizde http çağrısı tamamlandıktan sonra, mutatörünüzün kullandığını varsayar .