Rumah > Artikel > hujung hadapan web > Ambil perhatian bahawa gula sintaksis reaktif Vue telah ditamatkan!
Artikel ini membawakan anda situasi terkini tentang Vue terutamanya mengenai sintaks gula dalam Vue. Rakan-rakan yang berminat boleh melihatnya.
Sejak pengenalan konsep komposisi API, masalah utama yang tidak dapat diselesaikan ialah ref
dan reactive
Yang mana satu untuk digunakan? reactive
mempunyai masalah kehilangan responsif dengan pemusnahan, manakala ref
perlu digunakan di mana-mana .value
terasa menyusahkan dan mudah terlepas tanpa bantuan sistem jenis. .value
<template> <button @click="increment">{{ count }}</button> </template>menggunakan
untuk mentakrifkan ref
pembolehubah dan count
kaedah: increment
let count = ref(0) function increment() { count.value++ }semasa menggunakan reaktif syntax Sugar, kita boleh menulis kod seperti ini:
let count = $ref(0) function increment() { count++ }
$ref()
perintah makro masa kompilasi , ia bukan kaedah sebenar yang akan dipanggil semasa runtime, tetapi digunakan sebagai penanda untuk pengkompil Vue untuk menunjukkan bahawa pembolehubah akhir perlu menjadi count
pembolehubah reaktif.
.value
selepas penyusunan. Jadi kod dalam contoh di atas juga akan disusun ke dalam sintaks yang ditakrifkan menggunakan ref
. ref
ref
. Termasuk API berikut: $
$()
ref
const a = ref(0) let count = $(a) count++ console.log(a.value) // 1yang sepadan.
$$()
ref
let count = $ref(0) console.log(isRef($$(count))) // true:
$$()
props
KonfigurasitoRef
const { count } = defineProps<{ count: number }>() passAsRef($$(count))API Komposisi
Diperlukan, diperlukan , akan digunakan pada fail SFC dan js(x)/ts(x).
@vitejs/plugin-vue@>=2.0.0
// vite.config.js export default { plugins: [ vue({ reactivityTransform: true }) ] }kerana ia bukan sahaja berfungsi untuk SFC.
reactivityTransform
Jika ia adalah binaan script.refSugar
, vue-cli
Jika ia vue-loader@>=17.0.0
+
// vue.config.js module.exports = { chainWebpack: (config) => { config.module .rule('vue') .use('vue-loader') .tap((options) => { return { ...options, reactivityTransform: true } }) } }diperlukan, pada masa ini hanya berkuat kuasa untuk SFC.
webpack
vue-loader
vue-loader@>=17.0.0
Pilihan, tambah kod berikut pada fail
// webpack.config.js module.exports = { module: { rules: [ { test: /\.vue$/, loader: 'vue-loader', options: { reactivityTransform: true } } ] } }akan dilaporkan Walaupun ia tidak menjejaskan penggunaan, ia akan menjejaskan pengalaman pembangunan:
tsconfig.json
TS2304: Cannot find name '$ref'.
"compilerOptions":{ "types": ["vue/ref-macros"] }:
eslintrc.cjs
ESLint: '$ref' is not defined.(no-undef)
module.exports = { ...globals: { $ref: "readonly", $computed: "readonly", $shallowRef: "readonly", $customRef: "readonly", $toRef: "readonly", } };dan
vue/macros
tsconfig.json
eslintrc
Ciri Eksperimen Ditamatkanimport { $ref } from 'vue/macros' let count = $ref(0)
Ia akan dialih keluar daripada teras Vue dalam kemas kini versi kecil akan datang. Jika anda ingin terus menggunakannya, sila gunakan pemalam
Vue MacrosMatlamat asal Transformasi Kereaktifan adalah untuk meningkatkan pengalaman pembangun dengan menyediakan sintaks yang lebih bersih apabila menangani keadaan reaktif. Kami mengeluarkannya sebagai produk percubaan untuk mengumpulkan maklum balas daripada penggunaan dunia sebenar. Walaupun faedah yang dicadangkan ini, kami menemui isu berikut:
Kehilangan .value
menjadikannya lebih sukar untuk mengetahui perkara yang dijejaki dan garisan mana yang mencetuskan kesan reaktif. Masalah ini kurang jelas dalam SFC kecil, tetapi dalam asas kod besar, overhed mental menjadi lebih jelas, terutamanya jika sintaks juga digunakan di luar SFC .
Disebabkan (1), sesetengah pengguna memilih untuk menggunakan Reactivity Transform dalam SFC sahaja, yang mewujudkan ketidakkonsistenan dan kos penukaran konteks antara model mental yang berbeza. Jadi dilemanya ialah menggunakannya hanya di dalam SFC akan membawa kepada ketidakkonsistenan, tetapi menggunakannya di luar SFC akan menjejaskan kebolehselenggaraan.
Memandangkan masih terdapat fungsi luaran yang dijangka menggunakan rujukan mentah, penukaran antara pembolehubah reaktif dan rujukan mentah tidak dapat dielakkan. Ini akhirnya menambah lebih banyak kandungan pembelajaran dan beban mental tambahan, yang kami perhatikan lebih mengelirukan untuk pemula daripada API Komposisi biasa.
Paling penting, potensi risiko pemecahan. Walaupun ini adalah ikut serta secara eksplisit, sesetengah pengguna telah menyatakan bantahan keras terhadap cadangan itu kerana kebimbangan bahawa mereka perlu bekerja dengan asas kod yang berbeza di mana sesetengah pengguna telah memilih untuk menggunakannya dan yang lain Tidak. Ini adalah kebimbangan yang sah kerana Transformasi Kereaktifan memerlukan model mental yang berbeza dan memesongkan semantik JavaScript (tugasan pembolehubah boleh mencetuskan kesan reaktif).
Semua perkara yang dipertimbangkan, kami merasakan bahawa menggunakan ciri ini sebagai ciri yang stabil akan menyebabkan lebih banyak masalah daripada faedah dan oleh itu bukan pertukaran yang baik.
Rancangan Migrasi
Tinggalkan komen
ref.value
melakukan penukaran? Bagaimana pula dengan penyahbinaan props
responsif, adakah ia di sini untuk kekal? .value
kini mengelak daripada menggunakan ref()
jika boleh dan menggunakan reactive()
seperti sebelum ini? .value
adalah kerumitan yang diperlukan. Sama seperti perpustakaan reaktif lain xxx.set()
. ...
Pembelajaran yang disyorkan: "tutorial video vue.js"
Atas ialah kandungan terperinci Ambil perhatian bahawa gula sintaksis reaktif Vue telah ditamatkan!. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!