2017-07-15 18 views
5

मैं VueJS के साथ एक ऐप बना रहा हूं और मैं एक GrapgQL सर्वर के माध्यम से डेटाबेस से डेटा लाने के लिए अपोलो क्लाइंट का उपयोग कर रहा हूं। मैं कोड है कि इस तरह दिखता है: तो फिरअपोलो/ग्राफक्यूएल एक गैर विस्तारणीय वस्तु क्यों लौटाता है?

apollo.query({ 
     query, 
     variables 
    }) 
    // context.commit('populateComments', payload) triggers the mutation 
    .then(payload => context.commit('populateComments', payload)) 

, मैं निम्नलिखित है मेरी म्यूटेशन में

populateComments: (state, payload) => { 
     state.comments = payload.data.comments 
    } 

जब मैं एक और उत्परिवर्तन में टिप्पणी सरणी में किसी अन्य वस्तु पुश करने के लिए मैं कोई त्रुटि मिलती है की कोशिश है कि पढ़ता है "संपत्ति 300 नहीं जोड़ सकता, वस्तु एक्स्टेंसिबल नहीं है"। मैं ने पाया है कि निम्न कार्य

state.comments = Array.from(payload.data.comments) 

लेकिन .. मुझे यकीन है कि यह कितना प्रभावशाली है बार-बार इस तरह बड़े सरणियों कॉपी करने के लिए नहीं कर रहा हूँ? क्या यह करने का पसंदीदा तरीका है?

उत्तर

0

ग्राफक्लुएल/अपोलो के साथ स्वयं काम नहीं किया है, लेकिन मुझे लगता है कि यह डेटा को म्यूट करने के सिद्धांत को बनाए रखेगा, इसलिए ऑब्जेक्ट एक्स्टेंसिबल नहीं है। क्या आप अपने म्यूटेशन में कर सकते हैं इस तरह राज्य के लिए डेटा आवंटित करने के लिए है:

Vue.set(state, 'comments', payload.data.comments) 

यह सुनिश्चित करें कि वस्तु शुरू में गहरी कॉपी किया जाता है और बाद में आदेश प्रतिक्रियात्मकता का समर्थन करने के एक Vue अनुकूल तरीके से अद्यतन कर देगा। आप अधिक here पढ़ सकते हैं।

0

मुझे एक ही समस्या का सामना करना पड़ा है।

मैं जो कर रहा हूं वह एक _clone कर रहा है इससे पहले कि मैं वू प्रतिबद्धता में डेटा भेजूं।

0

आप और मैक्स की तरह मैं एक ही समस्या है और मेरे लिए एकमात्र समाधान का सामना करना पड़ा गया है इससे पहले कि

वस्तु क्लोन करने के लिए यदि आप Lodash (https://lodash.com/docs/4.17.5#cloneDeep) का उपयोग कर रहे थे:

const commentsClone = _.cloneDeep(payload.data.comments) 

नहीं करता है, तो (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/assign):

const commentsClone = Object.assign({}, payload.data.comments); 
+0

Object.assign आप एक ही दे देंगे आपके ऑब्जेक्ट/प्रकार का मुकदमा गहराई से घोंसला है – vbranden

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