Rumah > Artikel > hujung hadapan web > Apakah sebab mengapa ref mengikat dom atau komponen gagal dalam vue3 dan cara menyelesaikannya
Menggunakan ref
binding sering digunakan dalam vue3 Dalam kes ini komponen tertentu atau elemen DOM, dalam banyak kes, komponen yang berkaitan diikat dengan jelas menggunakan ref, tetapi pengikatan ref sering gagal.
Sebilangan besar kes di mana pengikatan ref gagal ialah apabila ref diikat pada komponen, komponen itu belum lagi dipaparkan, jadi pengikatan gagal.
Atau komponen tidak dipaparkan pada permulaan dan ref tidak terikat Apabila komponen mula membuat, ref juga mula terikat, tetapi pengikatan antara ref dan komponen tidak selesai masa, masalah akan berlaku apabila menggunakan kaedah berkaitan komponen. Komponen yang diikat oleh
ref menggunakan v-if
, atau komponen induknya menggunakan v-if
Akibatnya, apabila halaman mula dipaparkan, komponen ini tidak dipaparkan, jadi pengikatan gagal.
Terdapat banyak element-plus
tetingkap timbul dan komponen lain dalam dialog
Komponen ini disembunyikan pada mulanya dan hanya dipaparkan apabila pengguna mengklik butang, berkali-kali ia dipaparkan apabila pengguna mengklik butang , ref mula terikat pada komponen Pada masa ini, pengikatan tidak selesai Apabila kita menggunakan kaedah komponen melalui pembolehubah ref, ralat Uncaught TypeError: Tidak boleh membaca sifat null (membaca 'setCheckedNodes') akan muncul
Gunakan kaedah nextTick
vue3 untuk membiarkan logik memanggil kaedah komponen ref dilaksanakan dalam kepingan masa seterusnya. (Disyorkan)
function addFilterPropertyRule(row) { let ruleParamObj = JSON.parse(row.hardwareParam) if (ruleParamObj) { makePropertityTree(ruleParamObj, treeData) } addOrEditRuleVisible.value = true currentRuleItem = row if (row.ruleJson) { nextTick(() => { treeRef.value.setCheckedNodes(JSON.parse(row.ruleJson), false) }) } }
Gunakan pemasa tunda untuk membiarkan logik memanggil kaedah komponen ref menunggu seketika sebelum melaksanakan. (Tidak disyorkan)
Tiada layanan istimewa untuk gabungan rujukan templat API apabila digunakan secara dalaman oleh v-for. Pemprosesan tersuai fungsi mengikat diperlukan.
<template> <div v-for="(item, i) in list" :ref="el => { if (el) divs[i] = el }"> {{ item }} </div> </template> <script> import { ref, reactive, onBeforeUpdate } from 'vue' export default { setup() { const list = reactive([1, 2, 3]) const divs = ref([]) // 确保在每次更新之前重置ref onBeforeUpdate(() => { divs.value = [] }) return { list, divs } } } </script>
Ref
<template> <div ref="root">This is a root element</div> </template> <script> import { ref, onMounted } from 'vue' export default { setup() { const root = ref(null) onMounted(() => { // DOM 元素将在初始渲染后分配给 ref console.log(root.value) // <div>This is a root element</div> }) return { root } } } </script>
Atas ialah kandungan terperinci Apakah sebab mengapa ref mengikat dom atau komponen gagal dalam vue3 dan cara menyelesaikannya. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!