Rumah > hujung hadapan web > View.js > Apakah perbezaan antara

    <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 daripada laman web rasmi vue3, ialah gula sintaks untuk fungsi persediaan.

    1. Sintaks asas

    Cara menulis fungsi persediaan

    <script>
    import { ref } from &#39;vue&#39;
    export default {
      setup () {
        const num = ref(1);
        return { num }
      }
    }
    </script>
    Salin selepas log masuk

    Cara menulis fungsi persediaan Pembolehubah dan fungsi yang ditakrifkan dalam fungsi persediaan perlu dikembalikan, jika tidak, ia tidak boleh digunakan secara normal.

    Cara menulis gula sintaks dalam

    <script setup>
        import { ref } from &#39;vue&#39;
        const num = ref(1)
    </script>
    Salin selepas log masuk

    Pembolehubah dan fungsi yang ditakrifkan dalam gula sintaks dalam tidak perlu dikembalikan. Kod di dalam akan disusun ke dalam kandungan komponen 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.

    2. Perbezaan dalam menggunakan fail luaran

    fungsi persediaan

    <template>
      <div>
        <h3> {{test(name)}}</h3>
      </div>
    </template>
    <script>
    import { ref } from &#39;vue&#39;
    import { test } from &#39;@/utils/test.js&#39;
    export default {
      setup () {
        const name = ref(&#39;huang&#39;)
        const testName = test 
        return { name, testName }
      }
    }
    </script>
    Salin selepas log masuk

    Apabila fungsi persediaan menggunakan fail luaran, ia perlu ditakrifkan sebagai kaedah dalam fungsi persediaan untuk digunakan ia biasanya.

    <penyediaan skrip>Gula sintaks

    <template>
      <div>
        <h3>{{ test(name) }}</h3>
      </div>
    </template>
    <script setup>
    import { test } from &#39;@/utils/test.js&#39;
    import { ref } from &#39;vue&#39;
    const name = ref(&#39;huang&#39;)
    </script>
    Salin selepas log masuk

    Tidak perlu mentakrifkannya sebagai kaedah dalam <script setup> sintaks gula dan boleh digunakan secara terus.

    3. Daftar komponen

    fungsi persediaan

    <script>
    import Hello from &#39;@/components/HelloWorld&#39;
    export default {
      components: {
        Hello
      }
    }
    </script>
    Salin selepas log masuk

    <penetapan skrip>gula sintaks

    <script setup>
    import Hello from &#39;@/components/HelloWorld&#39;
    </script>
    Salin selepas log masuk

    Tidak perlu mendaftar dalam komponen, anda boleh menggunakannya terus .

    4. Gunakan arahan tersuai

    fungsi persediaan

    <template>
        <h2 v-onceClick>使用了setup函数</h2>
    </template>
    <script>
    export default {
      directives: {
        onceClick: {
          mounted (el, binding, vnode) {
            console.log(el)
          }
        }
      },
    }
    </script>
    Salin selepas log masuk

    <persediaan skrip> Gula sintaktik

    <template>
        <h2 v-my-Directive>使用了script setup</h2>
    </template>
    <script setup>
    const vMyDirective = {
      beforeMount: (el) => {
        console.log(el)
      }
    }
    </script>
    Salin selepas log masuk

    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

    5 komunikasi data ibu bapa kepada anak

    <Com :num="100"></Com>
    Salin selepas log masuk

    fungsi persediaan

    <script>
    export default {
      props: {
        num: {
          type: Number,
          default: 1
        }
      },
      setup (props) {
        console.log(props)
      }
    }
    </script>
    Salin selepas log masuk

    <persediaan skrip>gula sintaksis

    <script setup>
    import { defineProps } from &#39;vue&#39;
    const props = defineProps({
      num: {
        type: Number,
        default: 1
      }
    })
    </script>
    Salin selepas log masuk

    6 Komunikasi data daripada anak kepada ibu bapa

    fungsi persediaan

    <script>
    export default {
      setup (props, context) {
        const sendNum = () => {
          context.emit(&#39;sendNum&#39;, 200)
        }
        return { sendNum }
      }
    }
    </script>
    Salin selepas log masuk

    <gula persediaan skrip>Syntax 🎜>
    <script setup>
    import { defineProps, defineEmits } from &#39;vue&#39;
    const emit = defineEmits([&#39;submit&#39;])
    const sendNum = () => {
      emit(&#39;submit&#39;, 1000)
    }
    </script>
    Salin selepas log masuk

    defineProps dan defineEmits ialah makro pengkompil yang hanya boleh digunakan dalam . Ia tidak perlu diimport kerana ia akan disusun semasa proses

    defineProps menerima nilai yang sama seperti pilihan props dan defineEmits menerima nilai yang sama seperti pilihan yang dipancarkan.

    defineProps dan defineEmits akan memberikan potongan jenis yang sesuai selepas pilihan diluluskan.

    Pilihan yang diluluskan untuk defineProps dan defineEmits dinaikkan pangkat daripada persediaan kepada skop modul. Oleh itu, pembolehubah tempatan yang diisytiharkan dalam skop persediaan tidak boleh dirujuk oleh pilihan yang diluluskan. Melakukannya akan menyebabkan ralat penyusunan. Walau bagaimanapun, ia boleh merujuk pengikatan yang diimport kerana ia juga dalam skop modul.

    7. defineExpose and expose

    Dedahan komponen yang ditakrifkan menggunakan

    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>

    Anda boleh menggunakan

    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.

    Digunakan

    defineExpose

    <script setup>
    import { ref } from "vue";
    const type = ref("<script setup>语法糖");
    const msg = ref("使用了defineExpose");
    defineExpose({
      type,
      msg,
    });
    </script>
    Salin selepas log masuk

    Apakah perbezaan antara <script setup> dan fungsi setup dalam vue3

    Tidak digunakan

    defineExpose

    <script setup>
    import { ref } from "vue";
    const type = ref("<script setup>语法糖");
    const msg = ref("使用了defineExpose");
    </script>
    Salin selepas log masuk

    Apakah perbezaan antara <script setup> dan fungsi setup dalam vue3

    🎜>

    8. Digunakan dengan biasa boleh menggunakan tag

    dan

    biasa pada masa yang sama. Dalam kes keperluan tertentu, biasa boleh digunakan <script><script setup>

      untuk mengisytiharkan pilihan yang tidak boleh diisytiharkan dalam , seperti inheritAttrs atau pilihan tersuai untuk pemalam .
    • Isytiharkan eksport modul yang dinamakan.
    • 运行只需要在模块作用域执行一次的副作用,或是创建单例对象

    <script>
    // 普通 <script>, 在模块作用域下执行 (仅一次)
    runSideEffectOnce()
    // 声明额外的选项
    export default {
      name:&#39;header&#39;,
      inheritAttrs: false,
      customOptions: {}
    }
    </script>
    <script setup>
    // 在 setup() 作用域中执行 (对每个实例皆如此)
    </script>
    Salin selepas log masuk

    九、顶层的 await

    <script setup> 中可以使用顶层 await。结果代码会被编译成 async setup()

    <script setup>
    const post = await fetch(&#39;https://api.com&#39;).then((r) => r.json())
    </script>
    Salin selepas log masuk

    另外,await 的表达式会自动编译成在 await 之后保留当前组件实例上下文的格式。

    Apakah perbezaan antara <script setup> dan fungsi setup dalam vue3

     十、限制<script setup> 使用src属性

    由于模块执行语义的差异,<script setup></script> 中的代码依赖单文件组件的上下文。当将其移动到外部的 .js 或者 .ts 文件中的时候,对于开发者和工具来说都会感到混乱。因此,<script setup></script> 不能和 src attribute 一起使用。

    Atas ialah kandungan terperinci Apakah perbezaan antara

    Tutorial Popular
    Lagi>
    Muat turun terkini
    Lagi>
    kesan web
    Kod sumber laman web
    Bahan laman web
    Templat hujung hadapan