最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

vue3中<script?setup>?和?setup函數(shù)的區(qū)別對比

 更新時間:2023年04月27日 15:21:17   作者:Huang_xianlong  
這篇文章主要介紹了vue3中<script?setup>?和?setup函數(shù)的區(qū)別,本文給大家介紹的非常詳細,對大家的學(xué)習或工作具有一定的參考借鑒價值,需要的朋友可以參考下

<script setup> 是在單文件組件 (SFC) 中使用組合式 API 的編譯時語法糖。當同時使用 SFC 與組合式 API 時該語法是默認推薦。相比于普通的 <script> 語法,它具有更多優(yōu)勢:

  • 更少的樣板內(nèi)容,更簡潔的代碼。
  • 能夠使用純 TypeScript 聲明 props 和自定義事件。
  • 更好的運行時性能 (其模板會被編譯成同一作用域內(nèi)的渲染函數(shù),避免了渲染上下文代理對象)。
  • 更好的 IDE 類型推導(dǎo)性能 (減少了語言服務(wù)器從代碼中抽取類型的工作)。

以上是vue3官網(wǎng)對<script setup>的說明,其實<script setup> 就是 setup函數(shù)的一個語法糖。

一、基本語法

setup函數(shù)的寫法

<script>
import { ref } from 'vue'
export default {
  setup () {
    const num = ref(1);
    return { num }
  }
}
</script>

setup函數(shù)的寫法中定義的變量和函數(shù)都需要return出來,不然無法正常使用。

在<script setup>語法糖的寫法

<script setup>
    import { ref } from 'vue'
    const num = ref(1)
</script>

在<script setup>語法糖中的定義的變量和函數(shù)無需return。里面的代碼會被編譯成組件 setup() 函數(shù)的內(nèi)容。這意味著與普通的 <script> 只在組件被首次引入的時候執(zhí)行一次不同,<script setup> 中的代碼會在每次組件實例被創(chuàng)建的時候執(zhí)行。 

二、使用外部文件區(qū)別

setup函數(shù)

<template>
  <div>
    <h2> {{test(name)}}</h2>
  </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>

setup函數(shù)使用外部文件時需要在setup函數(shù)中定義成一個方法才能正常使用。

<script setup>語法糖

<template>
  <div>
    <h2>{{ test(name) }}</h2>
  </div>
</template>
<script setup>
import { test } from '@/utils/test.js'
import { ref } from 'vue'
const name = ref('huang')
</script>

在<script setup>語法糖中無需再定義成一個方法,可以直接使用 。

三、注冊組件

setup函數(shù)

<script>
import Hello from '@/components/HelloWorld'
export default {
  components: {
    Hello
  }
}
</script>

<script setup>語法糖

<script setup>
import Hello from '@/components/HelloWorld'
</script>

不需要在component 中注冊了,可以直接使用。

四、使用自定義指令

setup函數(shù)

<template>
    <h1 v-onceClick>使用了setup函數(shù)</h1>
</template>
<script>
export default {
  directives: {
    onceClick: {
      mounted (el, binding, vnode) {
        console.log(el)
      }
    }
  },
}
</script>

<script setup>語法糖

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

全局注冊的自定義指令將正常工作。本地的自定義指令在 <script setup> 中不需要顯式注冊,但他們必須遵循 vNameOfDirective 這樣的命名規(guī)范

五、父傳子數(shù)據(jù)通信

<Com :num="100"></Com>

setup函數(shù)

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

<script setup>語法糖

<script setup>
import { defineProps } from 'vue'
const props = defineProps({
  num: {
    type: Number,
    default: 1
  }
})
</script>

六、子傳父數(shù)據(jù)通信

setup函數(shù)

<script>
export default {
  setup (props, context) {
    const sendNum = () => {
      context.emit('sendNum', 200)
    }
    return { sendNum }
  }
}
</script>

<script setup>語法糖

<script setup>
import { defineProps, defineEmits } from 'vue'
const emit = defineEmits(['submit'])
const sendNum = () => {
  emit('submit', 1000)
}
</script>

defineProps 和 defineEmits 都是只能在 <script setup> 中使用的編譯器宏。他們不需要導(dǎo)入,且會隨著 <script setup> 的處理過程一同被編譯掉。

defineProps 接收與 props 選項相同的值,defineEmits 接收與 emits 選項相同的值。

defineProps 和 defineEmits 在選項傳入后,會提供恰當?shù)念愋屯茖?dǎo)。

傳入到 defineProps 和 defineEmits 的選項會從 setup 中提升到模塊的作用域。因此,傳入的選項不能引用在 setup 作用域中聲明的局部變量。這樣做會引起編譯錯誤。但是,它可以引用導(dǎo)入的綁定,因為它們也在模塊作用域內(nèi)。

七、defineExpose和expose

使用setup函數(shù)定義的組件的expose是默認開啟的,會將函數(shù)內(nèi)定義的實例變量、方法全部暴露出去。而使用<script setup>的組件是默認關(guān)閉的——即通過模板引用或者 $parent 鏈獲取到的組件的公開實例,不會暴露任何在 <script setup> 中聲明的綁定。

可以通過 defineExpose 編譯器宏來顯式指定在 <script setup> 組件中要暴露出去的屬性,若不使用 defineExpose 則獲取不到當前引用的組件實例變量、方法。

使用了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>

 

八、與普通的<script> 一起使用

<script setup> 可以和普通的 <script> 一起使用。普通的 <script> 在有這些需要的情況下或許會被使用到:

  • 聲明無法在 <script setup> 中聲明的選項,例如 inheritAttrs 或插件的自定義選項。
  • 聲明模塊的具名導(dǎo)出 (named exports)。
  • 運行只需要在模塊作用域執(zhí)行一次的副作用,或是創(chuàng)建單例對象
<script>
// 普通 <script>, 在模塊作用域下執(zhí)行 (僅一次)
runSideEffectOnce()
// 聲明額外的選項
export default {
  name:'header',
  inheritAttrs: false,
  customOptions: {}
}
</script>
<script setup>
// 在 setup() 作用域中執(zhí)行 (對每個實例皆如此)
</script>

九、頂層的 await

<script setup> 中可以使用頂層 await。結(jié)果代碼會被編譯成 async setup()

<script setup>
const post = await fetch('https://api.com').then((r) => r.json())
</script>

另外,await 的表達式會自動編譯成在 await 之后保留當前組件實例上下文的格式。

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

由于模塊執(zhí)行語義的差異,<script setup> 中的代碼依賴單文件組件的上下文。當將其移動到外部的 .js 或者 .ts 文件中的時候,對于開發(fā)者和工具來說都會感到混亂。因此,<script setup> 不能和 src attribute 一起使用。

到此這篇關(guān)于vue3中<script setup> 和 setup函數(shù)的區(qū)別的文章就介紹到這了,更多相關(guān)vue3<script setup> 和 setup函數(shù)區(qū)別內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • vue-cli在 history模式下的配置詳解

    vue-cli在 history模式下的配置詳解

    這篇文章主要介紹了vue-cli在 history模式下的配置詳解,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習或者工作具有一定的參考學(xué)習價值,需要的朋友們下面隨著小編來一起學(xué)習學(xué)習吧
    2019-11-11
  • vue實現(xiàn)導(dǎo)出word文檔功能實例(含多張圖片)

    vue實現(xiàn)導(dǎo)出word文檔功能實例(含多張圖片)

    項目需要導(dǎo)出word,于是乎又是查閱資料,然后自己寫,下面這篇文章主要給大家介紹了關(guān)于vue實現(xiàn)導(dǎo)出word文檔功能(含多張圖片)的相關(guān)資料,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下
    2022-09-09
  • vue返回首頁后如何清空路由問題

    vue返回首頁后如何清空路由問題

    這篇文章主要介紹了vue返回首頁后如何清空路由問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-06-06
  • vue.js實現(xiàn)數(shù)據(jù)庫的JSON數(shù)據(jù)輸出渲染到html頁面功能示例

    vue.js實現(xiàn)數(shù)據(jù)庫的JSON數(shù)據(jù)輸出渲染到html頁面功能示例

    這篇文章主要介紹了vue.js實現(xiàn)數(shù)據(jù)庫的JSON數(shù)據(jù)輸出渲染到html頁面功能,結(jié)合實例形式分析了vue.js針對本地json數(shù)據(jù)的讀取、遍歷輸出相關(guān)操作技巧,需要的朋友可以參考下
    2019-08-08
  • Element?Plus修改表格行和單元格樣式詳解

    Element?Plus修改表格行和單元格樣式詳解

    在使用Element Plus中的table組件展示數(shù)據(jù)時,由于需要對表格行內(nèi)數(shù)據(jù)的數(shù)據(jù)進行修改,下面這篇文章主要給大家介紹了關(guān)于Element?Plus修改表格行和單元格樣式的相關(guān)資料,需要的朋友可以參考下
    2022-04-04
  • vue調(diào)用語音播放的方法

    vue調(diào)用語音播放的方法

    這篇文章主要為大家詳細介紹了vue調(diào)用語音播放的方法,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-09-09
  • 詳解vue 組件

    詳解vue 組件

    這篇文章主要介紹了詳解vue 組件的相關(guān)知識,文中講解非常細致,代碼供大家參考學(xué)習,感興趣的朋友可以了解下
    2020-06-06
  • Vue2利用Axios發(fā)起請求的詳細過程記錄

    Vue2利用Axios發(fā)起請求的詳細過程記錄

    有很多時候你在構(gòu)建應(yīng)用時需要訪問一個API并展示其數(shù)據(jù),做這件事的方法有好幾種,而使用基于promise的HTTP客戶端axios則是其中非常流行的一種,這篇文章主要給大家介紹了關(guān)于Vue2利用Axios發(fā)起請求的詳細過程,需要的朋友可以參考下
    2021-12-12
  • Vue+elementUI下拉框自定義顏色選擇器方式

    Vue+elementUI下拉框自定義顏色選擇器方式

    這篇文章主要介紹了Vue+elementUI下拉框自定義顏色選擇器方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-02-02
  • 前端Vue?select下拉框使用以及監(jiān)聽事件詳解

    前端Vue?select下拉框使用以及監(jiān)聽事件詳解

    由于前端項目使用的是Vue.js和bootstrap整合開發(fā),中間用到了select下拉框,這篇文章主要給大家介紹了關(guān)于前端Vue?select下拉框使用以及監(jiān)聽事件的相關(guān)資料,需要的朋友可以參考下
    2024-03-03

最新評論

云南省| 天长市| 海兴县| 富平县| 任丘市| 敦化市| 海伦市| 德兴市| 安吉县| 淳安县| 桦甸市| 永济市| 桃园县| 黄陵县| 小金县| 田东县| 遵义市| 长葛市| 康定县| 福建省| 南汇区| 卓资县| 临沧市| 东明县| 太仆寺旗| 福鼎市| 赞皇县| 横山县| 西贡区| 六枝特区| 柘荣县| 中西区| 龙泉市| 甘泉县| 淮安市| 美姑县| 和顺县| 合江县| 航空| 汤阴县| 壶关县|