actionsVuex'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 myActiondöndürür Promise, bir http çağrısı yapar ve Promisesonrası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, myActionbu 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, actionsa 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 stateve genellikle den çağrılırlar actions. Karıştırmak için gerek yoktur Promisesile mutatorsolduğu gibi, actionsbu 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 .