Mencapai komposisi dan tindak balas yang dipertingkatkan dengan Vue.js 3.
P粉935883292
2023-08-03 15:58:35
<p>Memandangkan gabungan 'useNumbers.js' berikut dalam Vue.js 3, saya mahu 'nombor' dalam komponen menjadi responsif. Walau bagaimanapun, menambah nilai baharu pada 'nombor' dalam satu komponen tidak akan ditunjukkan dalam komponen kedua. <br /><br />useNumbers.js:</p><p><br /></p>
<pre class="brush:php;toolbar:false;">import { ref } daripada 'vue';
eksport fungsi lalai() {
nombor const = ref([1, 2, 3, 4, 5]);
const addNumber = num =>
numbers.value.push(num);
}
const filterNumber = minNum =>
return numbers.value.filter(curNum => curNum >= minNum);
}
kembalikan { nombor, tambahNombor, penapisNombor }
}</pre>
<p>Komponen A:</p>
<pre class="brush:php;toolbar:false;"><template>
<div>
<h1>Komponen kanak-kanak</h1>
<p>{{ nombor }}</p>
<butang @click="addNumber(45)">Tambah 45</button>
<div class="line"></div>
<Cucu />
</div>
</template>
<persediaan skrip>
import useNumbers daripada '../composables/useNumbers';
import GrandChild daripada './GrandChild.vue';
const { numbers, addNumber } = useNumbers()
</script></pre>
<p>Komponen B:</p>
<pre class="brush:php;toolbar:false;"><template>
<div>
<h1>Komponen GreatGrandChild</h1>
<p>{{ nombor }}</p>
<div class="line"></div>
</div>
</template>
<persediaan skrip>
import useNumbers daripada '../composables/useNumbers';
const {nombor } = useNumbers();
</script></pre>
<p> Setiap kali saya mengklik butang dalam komponen A (menambah 45 pada tatasusunan), perubahan ini tidak ditunjukkan dalam komponen B. Saya tahu bahawa operasi seperti memusnahkan tugasan mengakibatkan kehilangan responsif. </p>
<pre class="brush:php;toolbar:false;">const { numbers, addNumber } = useNumbers()</pre>
<p>Tindak balas rosak. Saya telah mencuba beberapa perkara menggunakan toRef dan toRefs tetapi masih belum menemui penyelesaian. </p>
Sebab utama masalah anda ialah setiap kali fungsi useNumbers dipanggil, contoh objek nombor baharu dicipta. Oleh itu, setiap komponen mempunyai salinan nombor sendiri, yang tidak dikongsi antara komponen.
Guna kedai
Untuk mengekalkan keadaan yang sama merentas berbilang contoh useNumbers, anda boleh menaikkan keadaan di luar fungsi supaya ia hanya dibuat sekali.
Vue Playground contoh