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

一文詳解Vue3中的setup函數(shù)的用法和原理

 更新時間:2024年02月20日 08:37:09   作者:小饅頭學(xué)python  
在 Vue3 中,setup 函數(shù)是一個新引入的概念,它代替了之前版本中的 data、computed、methods 等選項,用于設(shè)置組件的初始狀態(tài)和邏輯,本文將主要介紹Setup的基本用法和少量原理

OptionsAPI 與 CompositionAPI

Options API

Options API 是 Vue.js 2.x 中使用的傳統(tǒng)組件設(shè)計模式。它基于選項對象,將組件的數(shù)據(jù)、計算屬性、方法、生命周期鉤子等功能按照選項的形式進(jìn)行組織。Options API 的特點包括:

易于上手:Options API 的結(jié)構(gòu)清晰,容易理解和學(xué)習(xí),適合初學(xué)者入門。
邏輯分離:不同功能的代碼被分離到不同的選項中,使得代碼更易維護(hù)和閱讀。
依賴注入:通過 this 上下文可以方便地訪問到組件的屬性和方法。

Composition API

Composition API 是 Vue.js 3.x 中引入的新特性,旨在解決 Options API 在復(fù)雜組件中難以維護(hù)的問題。Composition API 允許將組件的邏輯按照功能相關(guān)性進(jìn)行組織,而不是按照選項分散組織。Composition API 的特點包括:

邏輯復(fù)用:可以將邏輯抽取為可復(fù)用的函數(shù),更方便地在不同組件之間共享邏輯。
代碼組織:將相關(guān)邏輯放在一起,使得組件更加清晰和易于維護(hù)。
更好的類型推斷:由于函數(shù)可以提供更多信息,TypeScript 在使用 Composition API 時能夠提供更好的類型推斷。

對比

Options類型的 API,數(shù)據(jù)、方法、計算屬性等,集中在:data、methods、computed中的,若想改動一個需求,就需要分別修改:data、methods、computed,不便于維護(hù)和復(fù)用。

Composition 可以用函數(shù)的方式,更加優(yōu)雅的組織代碼,讓相關(guān)功能的代碼更加有序的組織在一起。

上面我將兩種形式的API都列出來了,總的來說OptionsAPI屬于Vue2,CompositionAPI屬于Vue3,本文主要結(jié)合兩者進(jìn)行介紹

介紹

在 Vue3 中,setup 函數(shù)是一個新引入的概念,它代替了之前版本中的 data、computed、methods 等選項,用于設(shè)置組件的初始狀態(tài)和邏輯。setup 函數(shù)的引入使得組件的邏輯更加清晰和靈活,本文將主要介紹Setup的基本用法和少量原理

  • 更靈活的組織邏輯:setup 函數(shù)可以將相關(guān)邏輯按照功能進(jìn)行組織,使得組件更加清晰和易于維護(hù)。不再受到 Options API 中選項的限制,可以更自由地組織代碼。
  • 邏輯復(fù)用:可以將邏輯抽取為可復(fù)用的函數(shù),并在 setup 函數(shù)中進(jìn)行調(diào)用,實現(xiàn)邏輯的復(fù)用,避免了在 Options API 中通過 mixins 或混入對象實現(xiàn)邏輯復(fù)用時可能出現(xiàn)的問題。
  • 更好的類型推斷:由于 setup 函數(shù)本身是一個普通的 JavaScript 函數(shù),可以更好地與 TypeScript 配合,提供更好的類型推斷和代碼提示。
  • 更好的響應(yīng)式處理:setup 函數(shù)中可以使用 ref、reactive 等函數(shù)創(chuàng)建響應(yīng)式數(shù)據(jù),可以更方便地處理組件的狀態(tài),實現(xiàn)數(shù)據(jù)的動態(tài)更新。
  • 更細(xì)粒度的生命周期鉤子:setup 函數(shù)中可以使用 onMounted、onUpdated、onUnmounted 等函數(shù)注冊組件的生命周期鉤子,可以更細(xì)粒度地控制組件的生命周期行為。
  • 更好的代碼組織:setup 函數(shù)將組件的邏輯集中在一個地方,使得代碼更易讀、易維護(hù),并且可以更清晰地看到組件的整體邏輯。

上述特點有些暫時用不到,本節(jié)主要介紹下面三個特點

  • setup函數(shù)返回的對象中的內(nèi)容,可直接在模板中使用。
  • setup中訪問thisundefined。
  • setup函數(shù)會在beforeCreate之前調(diào)用,它是“領(lǐng)先”所有鉤子執(zhí)行的。

在這里插入圖片描述

從下面的圖就可以看出Setup的執(zhí)行要更優(yōu)先,以及this的不適用

在這里插入圖片描述

<template>
   <div class="person">
     <h2>姓名:{{name}}</h2>
     <h2>年齡:{{age}}</h2>
     <button @click="changeName">修改名字</button>
     <button @click="changeAge">修改年齡</button>
     <button @click="showTel">查看聯(lián)系方式</button>
   </div>
 </template>
 
 <script lang="ts">
   export default {
     name:'Person',
     setup(){
       console.log('~',this) 
       let name = '花卷' //非響應(yīng)式
       let age = 22  //非響應(yīng)式
       let tel = '12435143545'  //非響應(yīng)式
       
       // 方法
       function changeName() {
         name = '饅頭' 
         console.log(name) 
       }
       function changeAge() {
         age += 1 
         console.log(age) 
       }
       function showTel() {
         alert(tel)
       }
 
       // 將數(shù)據(jù)、方法交出去
       return {name,age,tel,changeName,changeAge,showTel}
     }
   }
 </script>

setup 的返回值

若返回一個對象:則對象中的:屬性、方法等,在模板中均可以直接使用**(重點關(guān)注)。**

在這里插入圖片描述

若返回一個函數(shù):則可以自定義渲染內(nèi)容,代碼如下:

setup(){
  return ()=> '你好??!'
}

Setup語法糖

大家十分清楚語法糖到哪都是為了使代碼更簡便

接下來我介紹一下語法糖的寫法

<script setup>
</script>

它可以自動返回,無需return返回,我們測試一下,首先在模版把a寫上

在這里插入圖片描述

然后再script里面寫,這里的let a = 111,就自帶返回了,我們接下來看看頁面

<script setup>
   let a = 111
</script>

很不幸,報錯了,我們讀一下報錯內(nèi)容,兩個標(biāo)簽必須采用相同類型,那么我們統(tǒng)一就好

在這里插入圖片描述

在這里插入圖片描述

<script lang="ts" setup>
   let a = 111
</script>

這樣結(jié)果就出來了

在這里插入圖片描述

我們?nèi)绻胍薷南旅娴拿?,除了重命名文件(大部分情況不采用),可以采用一個插件

在這里插入圖片描述

我們可以借助vite中的插件簡化

  • 第一步控制臺運行:npm i vite-plugin-vue-setup-extend -D
  • 第二步:vite.config.ts

在這里插入圖片描述

完整代碼如下

<template>
  <div class="person">
    <h2>姓名:{{name}}</h2>
    <h2>年齡:{{age}}</h2>
    <h2>地址:{{address}}</h2>
    <button @click="changeName">修改名字</button>
    <button @click="changeAge">修改年齡</button>
    <button @click="showTel">查看聯(lián)系方式</button>
  </div>
</template>

<script lang="ts" setup name="Person">  //自定義命名
  // 此時的name、age、tel都不是響應(yīng)式的數(shù)據(jù)
  let name = '張三'
  let age = 22
  let tel = '1424423451'
  let address = '北京市朝陽區(qū)'

  // 方法
  function changeName() {
    name = '' 
    console.log(name) 
  }
  function changeAge() {
    age += 1 
    console.log(age)
  }
  function showTel() {
    alert(tel)
  }
</script>

總結(jié)

一開始介紹了Vue2,3對應(yīng)的兩種API以及對比,之后簡單介紹了一下Vue3特有的函數(shù)—Setup,最后圍繞Setup介紹使用語法糖后,可以省略 export default 和 setup 屬性,使得組件的代碼更加簡潔和易讀。同時,Vue 3 也會將 參數(shù)地注入到 setup 函數(shù)中,使得在使用這些參數(shù)時不需要顯式地聲明。

以上就是一文詳解Vue3中的setup函數(shù)的用法和原理的詳細(xì)內(nèi)容,更多關(guān)于Vue3 setup函數(shù)的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • Vue插槽具體用法及實例分析

    Vue插槽具體用法及實例分析

    本文主要介紹了Vue框架中插槽的使用方法和應(yīng)用場景。通過具體實例分析,詳細(xì)講解了插槽的具體用法,幫助讀者深入理解Vue中插槽的使用和實現(xiàn)方式
    2023-05-05
  • 解決vue的component標(biāo)簽渲染問題

    解決vue的component標(biāo)簽渲染問題

    這篇文章主要介紹了解決vue的component標(biāo)簽渲染問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-03-03
  • Vue+ElementUI使用vue-pdf實現(xiàn)預(yù)覽功能

    Vue+ElementUI使用vue-pdf實現(xiàn)預(yù)覽功能

    這篇文章主要為大家詳細(xì)介紹了Vue+ElementUI使用vue-pdf實現(xiàn)預(yù)覽功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-11-11
  • Vue項目請求超時處理方式

    Vue項目請求超時處理方式

    這篇文章主要介紹了Vue項目請求超時處理方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-12-12
  • vue父子組件的數(shù)據(jù)傳遞示例

    vue父子組件的數(shù)據(jù)傳遞示例

    這篇文章主要介紹了vue父子組件的數(shù)據(jù)傳遞示例,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-03-03
  • Vue $emit $refs子父組件間方法的調(diào)用實例

    Vue $emit $refs子父組件間方法的調(diào)用實例

    今天小編就為大家分享一篇Vue $emit $refs子父組件間方法的調(diào)用實例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-09-09
  • 使用typescript構(gòu)建Vue應(yīng)用的實現(xiàn)

    使用typescript構(gòu)建Vue應(yīng)用的實現(xiàn)

    這篇文章主要介紹了使用typescript構(gòu)建Vue應(yīng)用的實現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-08-08
  • vue 全局引用公共的組件以及公共的JS文件問題

    vue 全局引用公共的組件以及公共的JS文件問題

    這篇文章主要介紹了vue 全局引用公共的組件以及公共的JS文件問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-09-09
  • 如何使用Webpack優(yōu)化Vue項目的打包流程

    如何使用Webpack優(yōu)化Vue項目的打包流程

    在開發(fā)基于Vue.js的應(yīng)用時,隨著項目規(guī)模的擴(kuò)大,單個文件的體積也會隨之增長,特別是當(dāng)涉及到大量的依賴庫和復(fù)雜的業(yè)務(wù)邏輯時,本文將詳細(xì)介紹如何使用Webpack來優(yōu)化Vue項目的打包流程,需要的朋友可以參考下
    2024-09-09
  • 前端vue如何使用pptxgen.js導(dǎo)出PPT

    前端vue如何使用pptxgen.js導(dǎo)出PPT

    最近公司項目有個導(dǎo)出ppt的功能,在使用ppexgen.js一周完成功能之后,這篇文章主要給大家介紹了關(guān)于前端vue如何使用pptxgen.js導(dǎo)出PPT的相關(guān)資料,需要的朋友可以參考下
    2024-01-01

最新評論

大新县| 诏安县| 怀安县| 吴桥县| 松江区| 舒城县| 常州市| 昭苏县| 故城县| 巢湖市| 镇平县| 修水县| 新巴尔虎右旗| 北安市| 当涂县| 克拉玛依市| 景德镇市| 河南省| 通城县| 增城市| 根河市| 岳普湖县| 石柱| 河北区| 蓬安县| 辰溪县| 弋阳县| 金湖县| 藁城市| 分宜县| 庆阳市| 盐津县| 宣恩县| 阿图什市| 商河县| 乐陵市| 专栏| 奉节县| 盘山县| 浦县| 通州区|