国产av日韩一区二区三区精品,成人性爱视频在线观看,国产,欧美,日韩,一区,www.成色av久久成人,2222eeee成人天堂

Jadual Kandungan
Soalan Perbincangan
Penyelesaian
Ringkaskan penyelesaian anda dengan VueUse
Rumah hujung hadapan web tutorial js Cara menggunakan objek dengan model v dalam Vue

Cara menggunakan objek dengan model v dalam Vue

Jan 20, 2025 am 02:34 AM

How to use an object with v-model in Vue

Semua orang sangat biasa dengan arahan v-model dalam Vue.js, yang melaksanakan pengikatan data dua hala antara komponen. Tetapi apabila melaksanakan v-model secara manual untuk komponen tersuai, anda biasanya menghadapi beberapa isu.

Pendekatan biasa adalah seperti berikut:

const props = defineProps(['modelValue']);
const emit = defineEmits(['update:modelValue']);
<template></template>

Sila ambil perhatian bahawa kami tidak akan mengubah suai nilai prop modelValue di dalam komponen. Sebaliknya, kami menghantar nilai yang dikemas kini kembali kepada komponen induk melalui kaedah emit dan komponen induk membuat pengubahsuaian sebenar. Ini kerana: Komponen anak tidak seharusnya menjejaskan keadaan komponen induk, yang merumitkan aliran data dan menyukarkan penyahpepijatan.

Seperti yang dinyatakan dalam dokumentasi Vue, prop tidak boleh diubah suai di dalam komponen anak. Jika anda melakukan ini, Vue akan mengeluarkan amaran dalam konsol.

Bagaimana keadaan subjek?

Objek dan tatasusunan dalam JavaScript ialah kes khas kerana ia diluluskan melalui rujukan. Ini bermakna komponen boleh secara langsung mengubah suai sifat bersarang prop objek. Walau bagaimanapun, Vue tidak memberi amaran tentang pengubahsuaian dalam sifat objek bersarang (menjejaki pengubahsuaian ini dikenakan penalti prestasi). Oleh itu, perubahan yang tidak dijangka itu boleh menyebabkan masalah dalam aplikasi anda yang sukar untuk dikesan dan nyahpepijat.

Kebanyakan masa kami menggunakan nilai asas sebagai v-model. Walau bagaimanapun, dalam beberapa kes, seperti semasa membina komponen borang, kita mungkin memerlukan v-model tersuai yang boleh mengendalikan objek. Ini membawa kepada soalan penting:

Bagaimana untuk melaksanakan v-model tersuai untuk mengendalikan objek sambil mengelakkan perangkap di atas?

Soalan Perbincangan

Salah satu cara ialah menggunakan sifat pengiraan boleh tulis atau defineModelfungsi pembantu. Walau bagaimanapun, kedua-dua penyelesaian mempunyai kelemahan yang ketara: ia secara langsung mengubah suai objek asal, yang mengalahkan tujuan mengekalkan aliran data yang jelas.

Untuk menggambarkan masalah ini, mari lihat contoh komponen "bentuk". Komponen ini direka bentuk untuk memancarkan salinan objek yang dikemas kini kembali ke komponen induk apabila nilai dalam bentuk berubah. Kami akan cuba mencapai ini menggunakan sifat pengiraan boleh tulis.

Dalam contoh ini, sifat pengiraan boleh tulis masih mengubah suai objek asal.

import { computed } from 'vue';
import { cloneDeep } from 'lodash-es';

type Props = {
  modelValue: { name: string; email: string; };
};

const props = withDefaults(defineProps<Props>(), {
  modelValue: () => ({ name: '', email: '' }),
});

const emit = defineEmits<{
  'update:modelValue': [value: Props['modelValue']];
}>();


const formData = computed({
  // 返回的getter對象仍然是可變的
  get() {
    return props.modelValue;
  },
  // 注釋掉setter仍然會修改prop
  set(newValue) {
    emit('update:modelValue', cloneDeep(newValue));
  },
});

Ini tidak berfungsi kerana objek yang dikembalikan daripada pengambil masih boleh berubah, menyebabkan objek asal diubah suai tanpa diduga.

defineModel Perkara yang sama. Memandangkan update:modelValue tidak dipancarkan daripada komponen dan sifat objek diubah suai tanpa sebarang amaran.

Penyelesaian

"Cara Vue" untuk mengendalikan situasi ini ialah menggunakan nilai reaktif dalaman untuk mewakili objek, dan melaksanakan dua pemerhati:

  1. Pemerhati memantau modelValue prop untuk perubahan dan mengemas kini nilai dalaman. Ini memastikan bahawa keadaan dalaman mencerminkan nilai prop terkini yang diluluskan oleh komponen induk.
  2. Pemerhati memerhati perubahan pada nilai dalaman. Apabila nilai dalaman dikemas kini, ia mengeluarkan versi klon baharu objek kepada komponen induk untuk mengelak mengubah suai objek asal secara langsung.

Untuk mengelakkan gelung maklum balas yang tidak berkesudahan antara kedua-dua pemerhati ini, kami perlu memastikan kemas kini pada prop modelValue tidak secara tidak sengaja mencetuskan semula pemerhati untuk nilai dalaman.

const props = defineProps(['modelValue']);
const emit = defineEmits(['update:modelValue']);
<template></template>

Saya tahu apa yang anda fikirkan: "Ini terlalu banyak!"

Ringkaskan penyelesaian anda dengan VueUse

Mengekstrak logik ini ke dalam fungsi tersusun boleh guna semula ialah cara yang bagus untuk memudahkan proses. Tetapi berita baiknya ialah: kita tidak perlu berbuat demikian! useVModel fungsi gabungan dalam VueUse boleh membantu kami menangani masalah ini!

VueUse ialah perpustakaan utiliti Vue yang berkuasa, sering dirujuk sebagai "Pisau Tentera Swiss" bagi utiliti yang terdiri. Ia boleh digoncangkan sepenuhnya oleh pokok, jadi kami hanya boleh menggunakan bahagian yang kami perlukan tanpa perlu risau tentang meningkatkan saiz bungkusan.

Berikut ialah contoh sebelum pemfaktoran semula menggunakan useVModel:

import { computed } from 'vue';
import { cloneDeep } from 'lodash-es';

type Props = {
  modelValue: { name: string; email: string; };
};

const props = withDefaults(defineProps<Props>(), {
  modelValue: () => ({ name: '', email: '' }),
});

const emit = defineEmits<{
  'update:modelValue': [value: Props['modelValue']];
}>();


const formData = computed({
  // 返回的getter對象仍然是可變的
  get() {
    return props.modelValue;
  },
  // 注釋掉setter仍然會修改prop
  set(newValue) {
    emit('update:modelValue', cloneDeep(newValue));
  },
});

Lebih ringkas!

Itu sahaja! Kami telah meneroka cara menggunakan objek dengan betul dengan v-model dalam Vue tanpa mengubah suai terus daripada komponen anak. Dengan menggunakan pemerhati atau memanfaatkan fungsi gubahan seperti useVModel VueUse, kami boleh mengekalkan pengurusan keadaan yang jelas dan boleh diramal dalam aplikasi kami.

Berikut ialah pautan Stackblitz dengan semua contoh dalam artikel ini. Jangan ragu untuk meneroka dan mencuba.

Terima kasih kerana membaca dan selamat mengekod!

Atas ialah kandungan terperinci Cara menggunakan objek dengan model v dalam Vue. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn

Alat AI Hot

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

Video Face Swap

Video Face Swap

Tukar muka dalam mana-mana video dengan mudah menggunakan alat tukar muka AI percuma kami!

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Java vs JavaScript: Membersihkan kekeliruan Java vs JavaScript: Membersihkan kekeliruan Jun 20, 2025 am 12:27 AM

Java dan JavaScript adalah bahasa pengaturcaraan yang berbeza, masing -masing sesuai untuk senario aplikasi yang berbeza. Java digunakan untuk pembangunan aplikasi perusahaan dan mudah alih yang besar, sementara JavaScript digunakan terutamanya untuk pembangunan laman web.

Komen JavaScript: Penjelasan ringkas Komen JavaScript: Penjelasan ringkas Jun 19, 2025 am 12:40 AM

JavaScriptcommentsareessentialformaintaining,reading,andguidingcodeexecution.1)Single-linecommentsareusedforquickexplanations.2)Multi-linecommentsexplaincomplexlogicorprovidedetaileddocumentation.3)Inlinecommentsclarifyspecificpartsofcode.Bestpractic

Bagaimana untuk bekerja dengan tarikh dan masa di JS? Bagaimana untuk bekerja dengan tarikh dan masa di JS? Jul 01, 2025 am 01:27 AM

Titik berikut harus diperhatikan apabila tarikh pemprosesan dan masa di JavaScript: 1. Terdapat banyak cara untuk membuat objek tarikh. Adalah disyorkan untuk menggunakan rentetan format ISO untuk memastikan keserasian; 2. Dapatkan dan tetapkan maklumat masa boleh diperoleh dan tetapkan kaedah, dan ambil perhatian bahawa bulan bermula dari 0; 3. Tarikh pemformatan secara manual memerlukan rentetan, dan perpustakaan pihak ketiga juga boleh digunakan; 4. Adalah disyorkan untuk menggunakan perpustakaan yang menyokong zon masa, seperti Luxon. Menguasai perkara -perkara utama ini secara berkesan dapat mengelakkan kesilapan yang sama.

Kenapa anda harus meletakkan tag  di bahagian bawah ? Kenapa anda harus meletakkan tag di bahagian bawah ? Jul 02, 2025 am 01:22 AM

PlacingtagsatthebottomofablogpostorwebpageservespracticalpurposesforSEO,userexperience,anddesign.1.IthelpswithSEObyallowingsearchenginestoaccesskeyword-relevanttagswithoutclutteringthemaincontent.2.Itimprovesuserexperiencebykeepingthefocusonthearticl

JavaScript vs Java: Perbandingan Komprehensif untuk Pemaju JavaScript vs Java: Perbandingan Komprehensif untuk Pemaju Jun 20, 2025 am 12:21 AM

JavaScriptispreferredforwebdevelopment, whersjavaisbetterforlarge-scalebackendsystemsandandroidapps.1) javascriptexcelsinceleatinginteractiveWebexperienceswithitsdynamicnatureanddommanipulation.2) javaoffersstrongyblectionandobjection

JavaScript: Meneroka jenis data untuk pengekodan yang cekap JavaScript: Meneroka jenis data untuk pengekodan yang cekap Jun 20, 2025 am 12:46 AM

JavascripthassevenfundamentalDatypes: nombor, rentetan, boolean, undefined, null, objek, andsymbol.1) numberuseadouble-precisionformat, bergunaforwidevaluangesbutbecautiouswithfloating-pointarithmetic.2)

Apakah peristiwa yang menggelegak dan menangkap di Dom? Apakah peristiwa yang menggelegak dan menangkap di Dom? Jul 02, 2025 am 01:19 AM

Penangkapan dan gelembung acara adalah dua peringkat penyebaran acara di Dom. Tangkap adalah dari lapisan atas ke elemen sasaran, dan gelembung adalah dari elemen sasaran ke lapisan atas. 1. Penangkapan acara dilaksanakan dengan menetapkan parameter useCapture addeventlistener kepada benar; 2. Bubble acara adalah tingkah laku lalai, useCapture ditetapkan kepada palsu atau ditinggalkan; 3. Penyebaran acara boleh digunakan untuk mencegah penyebaran acara; 4. Acara menggelegak menyokong delegasi acara untuk meningkatkan kecekapan pemprosesan kandungan dinamik; 5. Penangkapan boleh digunakan untuk memintas peristiwa terlebih dahulu, seperti pemprosesan pembalakan atau ralat. Memahami kedua -dua fasa ini membantu mengawal masa dan bagaimana JavaScript bertindak balas terhadap operasi pengguna.

Apa perbezaan antara Java dan JavaScript? Apa perbezaan antara Java dan JavaScript? Jun 17, 2025 am 09:17 AM

Java dan JavaScript adalah bahasa pengaturcaraan yang berbeza. 1.Java adalah bahasa yang ditaip dan disusun secara statik, sesuai untuk aplikasi perusahaan dan sistem besar. 2. JavaScript adalah jenis dinamik dan bahasa yang ditafsirkan, terutamanya digunakan untuk interaksi web dan pembangunan front-end.

See all articles