<script setup></script>
ialah gula sintaktik masa kompilasi untuk menggunakan API gubahan dalam komponen fail tunggal (SFC). Sintaks ini ialah pengesyoran lalai apabila menggunakan SFC dengan API komposisi. Berbanding dengan sintaks <script></script>
biasa, ia mempunyai lebih banyak kelebihan:
Kurang kandungan boilerplate dan kod yang lebih ringkas.
Keupayaan untuk mengisytiharkan prop dan acara tersuai menggunakan TypeScript tulen.
Prestasi masa jalan yang lebih baik (templatnya akan disusun menjadi fungsi pemaparan dalam skop yang sama, mengelakkan keperluan untuk memaparkan objek proksi konteks).
Prestasi inferens jenis IDE yang lebih baik (kurang berfungsi untuk pelayan bahasa mengekstrak jenis daripada kod).
Di atas ialah perihalan
<script> import { ref } from 'vue' export default { setup () { const num = ref(1); return { num } } } </script>
Cara menulis fungsi persediaan Pembolehubah dan fungsi yang ditakrifkan dalam fungsi persediaan perlu dikembalikan, jika tidak, ia tidak boleh digunakan secara normal.
<script setup> import { ref } from 'vue' const num = ref(1) </script>
Pembolehubah dan fungsi yang ditakrifkan dalam gula sintaks dalam setup()
fungsi. Ini bermakna tidak seperti <script>
biasa yang hanya dilaksanakan sekali apabila komponen mula-mula diperkenalkan, kod dalam <script setup>
akan dilaksanakan setiap kali tika komponen dibuat.
<template> <div> <h3> {{test(name)}}</h3> </div> </template> <script> import { ref } from 'vue' import { test } from '@/utils/test.js' export default { setup () { const name = ref('huang') const testName = test return { name, testName } } } </script>
Apabila fungsi persediaan menggunakan fail luaran, ia perlu ditakrifkan sebagai kaedah dalam fungsi persediaan untuk digunakan ia biasanya.
<template> <div> <h3>{{ test(name) }}</h3> </div> </template> <script setup> import { test } from '@/utils/test.js' import { ref } from 'vue' const name = ref('huang') </script>
Tidak perlu mentakrifkannya sebagai kaedah dalam <script setup> sintaks gula dan boleh digunakan secara terus.
<script> import Hello from '@/components/HelloWorld' export default { components: { Hello } } </script>
<script setup> import Hello from '@/components/HelloWorld' </script>
Tidak perlu mendaftar dalam komponen, anda boleh menggunakannya terus .
<template> <h2 v-onceClick>使用了setup函数</h2> </template> <script> export default { directives: { onceClick: { mounted (el, binding, vnode) { console.log(el) } } }, } </script>
<template> <h2 v-my-Directive>使用了script setup</h2> </template> <script setup> const vMyDirective = { beforeMount: (el) => { console.log(el) } } </script>
Arahan tersuai yang didaftarkan secara global akan berfungsi seperti biasa. Arahan tersuai tempatan tidak perlu didaftarkan secara eksplisit dalam <script setup>
, tetapi ia mesti mengikut konvensyen penamaan vNameOfDirective
<Com :num="100"></Com>
<script> export default { props: { num: { type: Number, default: 1 } }, setup (props) { console.log(props) } } </script>
<script setup> import { defineProps } from 'vue' const props = defineProps({ num: { type: Number, default: 1 } }) </script>
<script> export default { setup (props, context) { const sendNum = () => { context.emit('sendNum', 200) } return { sendNum } } } </script>
<script setup> import { defineProps, defineEmits } from 'vue' const emit = defineEmits(['submit']) const sendNum = () => { emit('submit', 1000) } </script>
fungsi persediaan didayakan secara lalai, dan semua pembolehubah contoh dan kaedah yang ditakrifkan dalam fungsi akan menjadi terdedah. Komponen yang menggunakan <script setup> dimatikan secara lalai - iaitu, contoh awam komponen yang diperoleh melalui rujukan templat atau rantai tidak akan mendedahkan apa-apa yang diisytiharkan dalam $parent
Binding. <script setup>
makro pengkompil untuk menyatakan secara eksplisit sifat yang akan didedahkan dalam komponen defineExpose
Jika anda tidak menggunakan <script setup>
defineExpose , anda tidak akan dapat memperolehnya. pembolehubah contoh komponen yang dirujuk pada masa ini.
defineExpose
<script setup> import { ref } from "vue"; const type = ref("<script setup>语法糖"); const msg = ref("使用了defineExpose"); defineExpose({ type, msg, }); </script>
defineExpose
<script setup> import { ref } from "vue"; const type = ref("<script setup>语法糖"); const msg = ref("使用了defineExpose"); </script>
🎜>
biasa pada masa yang sama. Dalam kes keperluan tertentu,
运行只需要在模块作用域执行一次的副作用,或是创建单例对象
<script> // 普通 <script>, 在模块作用域下执行 (仅一次) runSideEffectOnce() // 声明额外的选项 export default { name:'header', inheritAttrs: false, customOptions: {} } </script> <script setup> // 在 setup() 作用域中执行 (对每个实例皆如此) </script>
<script setup>
中可以使用顶层 await
。结果代码会被编译成 async setup()
<script setup> const post = await fetch('https://api.com').then((r) => r.json()) </script>
另外,await 的表达式会自动编译成在 await
之后保留当前组件实例上下文的格式。
由于模块执行语义的差异,<script setup></script>
中的代码依赖单文件组件的上下文。当将其移动到外部的 .js
或者 .ts
文件中的时候,对于开发者和工具来说都会感到混乱。因此,<script setup></script>
不能和 src
attribute 一起使用。
Atas ialah kandungan terperinci Apakah perbezaan antara