आपको यह समझने की आवश्यकता है, आपके द्वारा किए जा रहे घटक पदानुक्रम और आप कैसे प्रॉपर से गुजर रहे हैं, निश्चित रूप से आपका मामला विशेष है और आमतौर पर देवों द्वारा सामना नहीं किया गया है।
मूल घटक -myProp-> बाल घटक -myProp-> पोते का घटक
यदि myProp को मूल घटक में बदल दिया जाता है तो यह बाल घटक में भी परिलक्षित होगा ।
और अगर myProp को बाल घटक में बदल दिया जाता है, तो यह पोते के घटक में भी परिलक्षित होगा ।
इसलिए यदि myProp को मूल घटक में बदला जाता है तो यह पोते के घटक में परिलक्षित होगा । (अब तक तो सब ठीक है)।
इसलिए पदानुक्रम के नीचे आपको कुछ भी करने की आवश्यकता नहीं होती है, स्वाभाविक रूप से प्रतिक्रियाशील होगा।
अब पदानुक्रम में ऊपर जाने की बात कर रहे हैं
अगर myProp को ग्रैंडचिल्ड घटक में बदल दिया जाता है तो यह चाइल्ड घटक में परिलक्षित नहीं होगा । आपको बच्चे में .sync संशोधक का उपयोग करना होगा और ग्रैंडचिल्ड घटक से ईवेंट का उत्सर्जन करना होगा।
अगर myProp को चाइल्ड कंपोनेंट में बदल दिया जाए तो यह पैरेंट कंपोनेंट में परिलक्षित नहीं होगा । आपको माता-पिता में .sync संशोधक का उपयोग करना होगा और बच्चे के घटक से घटना का उत्सर्जन करना होगा।
अगर myProp को ग्रैंडहिल्ड घटक में बदल दिया जाता है तो यह मूल घटक (स्पष्ट रूप से) में परिलक्षित नहीं होगा । आपको .sync मॉडिफ़ायर चाइल्ड का उपयोग करना होगा और पोते के घटक से ईमट इवेंट, फिर चाइल्ड कंपोनेंट में प्रॉप देखें और बदलाव पर एक ईवेंट उत्सर्जित करें, जो कि .sync मॉडिफ़ायर का उपयोग करके सुने जा रहे हैं।
आइए भ्रम से बचने के लिए कुछ कोड देखें
Parent.vue
<template>
<div>
<child :myProp.sync="myProp"></child>
<input v-model="myProp"/>
<p>{{myProp}}</p>
</div>
</template>
<script>
import child from './Child.vue'
export default{
data(){
return{
myProp:"hello"
}
},
components:{
child
}
}
</script>
<style scoped>
</style>
Child.vue
<template>
<div> <grand-child :myProp.sync="myProp"></grand-child>
<p>{{myProp}}</p>
</div>
</template>
<script>
import grandChild from './Grandchild.vue'
export default{
components:{
grandChild
},
props:['myProp'],
watch:{
'myProp'(){
this.$emit('update:myProp',this.myProp)
}
}
}
</script>
<style>
</style>
Grandchild.vue
<template>
<div><p>{{myProp}}</p>
<input v-model="myProp" @input="changed"/>
</div>
</template>
<script>
export default{
props:['myProp'],
methods:{
changed(event){
this.$emit('update:myProp',this.myProp)
}
}
}
</script>
<style>
</style>
लेकिन इसके बाद आप वाउ कहने की चिल्लाहट को नोटिस करने में मदद नहीं करेंगे
जब भी मूल घटक पुन: रेंडर किया जाता है, तो मान को सीधे एक प्रोप को बदलने से बचें।
जैसा कि मैंने पहले उल्लेख किया है कि अधिकांश देवता इस मुद्दे का सामना नहीं करते हैं, क्योंकि यह एक विरोधी पैटर्न है। इसलिए आपको यह चेतावनी मिलती है।
लेकिन अपने मुद्दे को हल करने के लिए (आपके डिजाइन के अनुसार)। मेरा मानना है कि आपको उपरोक्त कार्य (ईमानदार होने के लिए हैक) करना होगा। मैं अभी भी सलाह देता हूं कि आपको अपने डिजाइन पर पुनर्विचार करना चाहिए और बग्स के लिए कम संभावना है।
मुझे उम्मीद है यह मदद करेगा।