2017-04-06 15 views
6

के भीतर गेटर्स तक पहुंचने के लिए एक वूएक्स स्टोर उत्परिवर्तन के भीतर, क्या गेटटर तक पहुंच बनाना संभव है? नीचे दिए गए उदाहरण पर विचार करें।Vuex उत्परिवर्तन

new Vuex.Store({ 
    state: { 
     question: 'Is it possible to access getters within a Vuex mutation?' 
    }, 
    mutations: { 
     askQuestion(state) { 
      // TODO: Get question from getter here 
      let question = ''; 

      if (question) { 
       // ... 
      } 
     } 
    }, 
    getters: { 
     getQuestion: (state) => { 
      return state.question; 
     } 
    } 
}); 

बेशक उदाहरण खास मतलब नहीं है, क्योंकि मैं तो बस उत्परिवर्तन के भीतर state वस्तु पर सीधे question संपत्ति का उपयोग कर सकता है, लेकिन मुझे आशा है कि आप देख मैं क्या करने की कोशिश कर रहा हूँ। वह सशर्त रूप से राज्य में छेड़छाड़ कर रहा है।

उत्परिवर्तन के भीतर, thisundefined है और state पैरामीटर state वस्तु का उपयोग करने देता है, और नहीं की दुकान के बाकी।

The documentation on mutations ऐसा करने के बारे में कुछ भी उल्लेख नहीं करता है।

मेरा अनुमान होगा कि यह संभव नहीं है, जब तक कि मुझे कुछ याद नहीं आया? मुझे लगता है कि वैकल्पिक रूप से स्टोर के बाहर इस तर्क को निष्पादित करना होगा (परिणामस्वरूप कोड डुप्लिकेशंस) या ऐसा करने वाली क्रिया को कार्यान्वित करना, क्योंकि कार्यों को पूरे स्टोर संदर्भ तक पहुंच है। मुझे पूरा यकीन है कि यह एक बेहतर दृष्टिकोण है, जो उत्परिवर्तन को उस पर ध्यान केंद्रित करना है जो वास्तव में करना है; राज्य को mutate। शायद यही है कि मैं क्या करूँगा, लेकिन अगर मैं उत्परिवर्तन के भीतर गेटर तक पहुंचने के लिए भी संभव हूं तो मैं उत्सुक हूं?

+0

आप शायद तुम क्यों उत्परिवर्तन में ही टिककर खेल आवश्यकता होगी पर विस्तृत सकता है? आप सही हैं कि आपका उदाहरण आसानी से 'state.question' को संदर्भित कर सकता है। और, हां, किसी भी तर्क जो वर्तमान स्थिति के आधार पर एक अलग * कार्रवाई * लेगा, उसे एक क्रिया में संभाला जाना चाहिए। – thanksd

+1

आप कार्यों में गेटर्स तक पहुंच सकते हैं, क्योंकि क्रियाएं पहले तर्क के रूप में संदर्भ प्राप्त करती हैं। इस तरह: क्रियाएं: {action1: (संदर्भ, पेलोड) => {console.log (context.getters.get कुछ); }}। सुनिश्चित नहीं है कि आप इसे उत्परिवर्तन में कर सकते हैं, क्योंकि उत्परिवर्तन केवल स्थानीय 'राज्य' प्राप्त करते हैं। – wostex

+0

@thanksd क्योंकि मेरा असली कोड इससे अधिक जटिल है, और मुझे कुछ जांचना होगा। ठोस उदाहरण एक कार्ट में एक उत्पाद जोड़ रहा है, और मैं यह जांचना चाहता हूं कि यह पहले से मौजूद है या नहीं। मैं इसे साफ रखने के लिए उत्परिवर्तन से उस तर्क को बाहर रखना चाहता था। मुझे पूरा यकीन है कि एक क्रिया का उपयोग करने का सबसे अच्छा तरीका भी है, लेकिन किसी भी कारण से - उत्परिवर्तन के भीतर गेटर्स तक पहुंचने के लिए भी संभव है, लेकिन केवल उत्सुक था। – Andy0708

उत्तर

2

वूएक्स स्टोर उत्परिवर्तन विधियां गेटर्स तक सीधे पहुंच प्रदान नहीं करती हैं।

यह शायद बुरा व्यवहार है, लेकिन आप जब इतनी तरह एक उत्परिवर्तन करने getters के लिए एक संदर्भ दे सकते हैं:

actions: { 
    fooAction({commit, getters}, data) { 
    commit('FOO_MUTATION', {data, getters}) 
    } 
}, 
mutations: { 
    FOO_MUTATION(state, {data, getters}) { 
    console.log(getters); 
    } 
} 
+0

धन्यवाद! मैं एक कार्रवाई के साथ जाऊंगा क्योंकि यह अधिक उपयुक्त लगता है। मैं मानता हूं कि गेटर्स के साथ गुजरना एक कामकाज है, लेकिन मैंने इसके बारे में सोचा नहीं था। स्पष्टीकरण के लिए धन्यवाद! :-) – Andy0708

संबंधित मुद्दे