actions
Vuex में अतुल्यकालिक हैं। कॉलिंग फ़ंक्शन (कार्रवाई के आरंभकर्ता) को यह बताने का एकमात्र तरीका है कि एक कार्रवाई पूरी हो गई है - एक वादा वापस करके और बाद में हल करके।
यहाँ एक उदाहरण है: myAction
एक रिटर्न Promise
, एक http कॉल करता है और Promise
बाद में हल करता है या अस्वीकार करता है - सभी अतुल्यकालिक
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);
})
})
}
}
अब, जब आपका Vue घटक आरंभ होता है myAction
, तो उसे यह वादा वस्तु मिल जाएगी और पता चल सकता है कि यह सफल हुआ या नहीं। यहाँ Vue घटक के लिए कुछ नमूना कोड है:
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")
})
}
}
जैसा कि आप ऊपर देख सकते हैं, यह actions
वापसी के लिए बेहद फायदेमंद हैPromise
। अन्यथा एक्शन सर्जक के पास यह जानने का कोई रास्ता नहीं है कि क्या हो रहा है और जब चीजें उपयोगकर्ता इंटरफ़ेस पर कुछ दिखाने के लिए पर्याप्त स्थिर हैं।
और एक अंतिम नोट mutators
- जैसा कि आपने ठीक बताया है, वे समकालिक हैं। वे सामान को अंदर बदलते state
हैं, और आमतौर से कहा जाता है actions
। मिश्रण करने की जरूरत नहीं है Promises
के साथ mutators
के रूप में, actions
संभाल वह हिस्सा।
संपादित करें: यूआई-दिशात्मक डेटा प्रवाह के Vuex चक्र पर मेरे विचार:
यदि आप डेटा को एक्सेस करते हैं this.$store.state["your data key"]
अपने घटकों की करते हैं, तो डेटा प्रवाह यूनि-दिशात्मक है।
कार्रवाई से वादा केवल घटक को यह बताना है कि कार्रवाई पूरी हो गई है।
घटक या तो उपरोक्त उदाहरण में वादा समाधान फ़ंक्शन से डेटा ले सकता है (यूनी-दिशात्मक नहीं है, इसलिए अनुशंसित नहीं है), या सीधे से $store.state["your data key"]
जिसमें से यूनिडायरेक्शनल है और vuex डेटा जीवनचक्र का अनुसरण करता है।
Vue.set(state, "your data key", http_data)
एक बार http कॉल आपके एक्शन में पूरी हो जाने के बाद उपरोक्त पैराग्राफ आपके म्यूटेटर का उपयोग करता है।