setup 函數在 Vue 3 中的作用是什么?什么時候會執行

文章目錄

  • 前言
    • ? 一、`setup()` 函數的作用是什么?
    • ? 二、`setup()` 什么時候執行?
    • ? 三、`setup()` 的參數
    • ? 四、`setup()` 中不能做什么?
    • ? 五、常見用法示例
    • ? 六、總結(適合背誦或面試回答)
  • `<script setup>` 是 **Vue 3.2+ 推出的語法糖**
    • ? 一句話總結:
    • ? 二、它能干什么?
    • ? 三、核心特性與優勢
    • ? 四、與 `defineComponent + setup()` 對比
    • ? 五、defineProps 和 defineEmits 示例
    • ? 六、何時應該用 `<script setup>`?
    • 🧠 面試總結推薦回答


前言

setup() 函數是 Vue 3 中 Composition API 的核心入口,它在組件生命周期中扮演了非常關鍵的角色。


? 一、setup() 函數的作用是什么?

setup() 是在組件創建之前執行的一個初始化函數,用來:

功能類別作用簡述
響應式狀態聲明創建 refreactive 等響應式變量
邏輯封裝封裝業務邏輯為函數(或導入 composables)
生命周期注冊使用 onMountedonUnmounted 等注冊生命周期邏輯
計算屬性使用 computed() 定義依賴狀態的衍生值
props & emit接收組件的 props,并通過 emit 觸發自定義事件
返回模板綁定對象返回的數據/方法可以直接在模板 <template> 中使用

? 二、setup() 什么時候執行?

setup() 會在 組件初始化 時(比 created 更早)執行 一次,并且只執行一次。

執行順序如下:

beforeCreate -> setup() -> created -> beforeMount -> mounted

?? 注意:在 setup() 中不能訪問 this,因為組件實例還未創建完成。


? 三、setup() 的參數

setup(props, context) {// props 是只讀的響應式對象// context 包含三個屬性:attrs、slots、emit
}
參數類型說明
props響應式傳入組件的 props,不能解構(會失去響應式)
context普通對象包含 attrs(非 props)、slotsemit 等輔助項

? 四、setup() 中不能做什么?

  • ? 不能訪問 this,因為組件實例還沒創建。
  • ? 不能使用 datamethodscomputed(Options API 的寫法)。
  • ? 不建議直接修改 props(它是只讀響應式的)。

? 五、常見用法示例

import { defineComponent, ref, onMounted } from 'vue'export default defineComponent({props: {title: String},setup(props, { emit }) {const count = ref(0)const increment = () => {count.value++emit('update', count.value)}onMounted(() => {console.log('組件掛載', props.title)})return { count, increment }}
})

? 六、總結(適合背誦或面試回答)

setup() 是 Vue 3 中組件邏輯的統一入口,在組件創建前執行,用于定義響應式狀態、邏輯封裝、生命周期注冊、事件觸發等,是 Composition API 的核心支點。


<script setup>Vue 3.2+ 推出的語法糖

是對 setup() 函數的簡化寫法,專為提高開發效率和代碼可讀性而設計。


? 一句話總結:

<script setup> 就是把 setup() 函數**“自動內聯展開”,省略 defineComponent()return {} 等冗余寫法,讓你寫的每一行代碼自動在 setup 環境中執行**。


? 二、它能干什么?

等價于你自己手寫的:

export default defineComponent({setup() {// ...return {}}
})

變成了這樣👇:

<script setup>
import { ref } from 'vue'const count = ref(0)
function increment() {count.value++
}
</script><template><button @click="increment">{{ count }}</button>
</template>

? 三、核心特性與優勢

特性說明
自動注冊為 setup()所有代碼都是在 setup() 中執行的,不用再寫 setup() 函數
不需要 return所有聲明的變量/函數,自動暴露給模板 <template> 使用
支持宏命令提供 <script setup> 獨有指令:defineProps()defineEmits()
更少的樣板代碼不需要寫 import { defineComponent }setup(), return {}
更強的類型推導更好配合 TypeScript 使用

? 四、與 defineComponent + setup() 對比

對比項<script setup>defineComponent + setup()
寫法簡潔性? 更簡潔、無樣板代碼? 模板多
模板中變量自動暴露? 自動暴露,無需 return? 需要手動 return
TypeScript 類型推導? IDE 更智能? 支持但稍顯繁瑣
可讀性? 更易讀? 模板化程度高
靈活性(命名組件)? 不支持寫 name 字段(需額外用 defineOptions)? 可以顯式命名

? 五、defineProps 和 defineEmits 示例

<script setup lang="ts">
const props = defineProps<{ title: string }>()
const emit = defineEmits<{(e: 'update', value: number): void
}>()function click() {emit('update', 42)
}
</script>

? 六、何時應該用 <script setup>

場景是否推薦用 <script setup>
Vue 3 + TypeScript 項目? 強烈推薦
單文件組件 + 簡潔邏輯? 更高效
組件邏輯復雜,需要分離? 可以拆分成 composables
需要用 JSX? 不支持 <script setup> JSX
遷移自 Vue 2? 可逐步遷移簡化

🧠 面試總結推薦回答

<script setup> 是 Vue 3.2 引入的 SFC 編譯器語法糖,本質上是 setup 函數的展開,去掉了樣板代碼、提高了開發效率,自動暴露變量給模板、支持 defineProps/Emits,特別適合 TypeScript 項目與組合式邏輯拆分。


本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/79969.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/79969.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/79969.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

JDBC實現--保姆級教程~

本來以為寫過一個使用python與數據庫連接的文章&#xff0c;但是今天突然發現沒有&#xff0c;那就直接寫Java與數據庫連接的吧。當然如果大家有需要可以告訴我&#xff0c;有時間的話也可以寫一個的pymysql的使用的。 數據庫有很多種&#xff0c;接下來我就以MySQL為例來進行講…

Ubuntu18.04搭建samda服務器

一.什么是Samba服務器&#xff1f; Samba服務器是一種基于開源協議實現的網絡共享服務軟件&#xff0c;主要用于在不同操作系統&#xff08;如Windows、Linux、Unix&#xff09;之間實現文件和打印機共享功能。其核心目標是解決跨平臺資源共享的兼容性問題&#xff0c;尤其是在…

《分詞算法大揭秘:BPE、BBPE、WordPiece、ULM常見方法介紹》

分詞算法是自然語言處理&#xff08;NLP&#xff09;中的一個重要預處理步驟&#xff0c;它將文本分割成更小的單元&#xff08;如單詞、子詞或字符&#xff09;。以下是幾種常見的分詞算法&#xff1a;Byte Pair Encoding (BPE)、Byte-level BPE (BBPE)、WordPiece 和 Unigram…

WordPress01 - 后臺常用功能

最近些日子研究Wordpress&#xff0c;做些簡單的筆記。 怎么安裝Wordpress&#xff0c;怎么進的后臺&#xff0c;這些咱就不嘮了哈&#xff0c;網上到處是教程。 目錄 1&#xff0c;Wordpress的后臺 1-1&#xff0c; Posts(投稿) 1-2&#xff0c;Media(媒體) 1-3&#xf…

R8周:RNN實現阿爾茨海默病診斷

&#x1f368; 本文為&#x1f517;365天深度學習訓練營中的學習記錄博客 &#x1f356; 原作者&#xff1a;K同學啊 一、前期準備 1.設置GPU import numpy as np import pandas as pd import torch from torch import nn import torch.nn as nn import torch.nn.functi…

今天python練習題

目錄 一、每日一言 二、練習題 三、效果展示 四、下次題目 五、總結 一、每日一言 不要害怕失敗&#xff0c;失敗可能成為我們前進的動力&#xff01; 二、練習題 有列表lst [[1,2,3],[4,5,6],[7,8,9]],取出其中的元素1/5/9組成新的列表 # 有列表lst [[1,2,3],[4,5,6],[…

機器人強化學習入門學習筆記(二)

基于上一篇的《機器人強化學習入門學習筆記》,在基于 MuJoCo 的仿真強化學習訓練中,除了 PPO(Proximal Policy Optimization)之外,還有多個主流強化學習算法可用于訓練機器人直行或其他復雜動作。 ?? 一、常見強化學習算法對比(可用于 MuJoCo) 算法類型特點適合場景PP…

用 DuckDB 高效分析 JSON 數據:從入門到實戰

解析 JSON 文件進行分析常常充滿挑戰。無論你是在處理 API 響應、日志文件&#xff0c;還是應用數據&#xff0c;如果沒有合適的工具&#xff0c;分析 JSON 都會非常耗時。 借助 DuckDB&#xff0c;你可以直接用 SQL 查詢復雜的 JSON 文件&#xff0c;無需編寫復雜的解析代碼或…

從貼牌到品牌:出海官網如何讓中國制造“貴”起來?

在全球經濟一體化的當下&#xff0c;中美關稅戰如同一記重錘&#xff0c;給國際貿易格局帶來了巨大震蕩。自貿易摩擦爆發以來&#xff0c;雙方多次調整關稅政策&#xff0c;涉及的商品種類不斷增多&#xff0c;稅率持續攀升&#xff0c;眾多中國企業的出口業務遭受重創&#xf…

react-13react中外部css引入以及style內聯樣式(動態className與動態style)

1. 外部css文件 - 普通引入 1.1 創建一個 CSS 文件&#xff0c;MyComponent.css。 /* MyComponent.css */ .my-class {color: red;font-size: 20px; } 1.2 組件中import引入 import React from react; import ./MyComponent.css; // 引入 CSS 文件function MyComponent() {r…

n8n 與智能體構建:開發自動化 AI 作業的基礎平臺

n8n 是一款開源的自動化流程構建平臺&#xff0c;通過其模塊化節點系統&#xff0c;開發者可以快速實現跨平臺的任務編排、數據集成與智能交互。當 n8n 與大型語言模型&#xff08;LLM&#xff09;結合時&#xff0c;就能構建出具備感知、推理、執行能力的 AI 智能體&#xff0…

14.Spring Boot 3.1.5 集成 Spring Security 進行訪問控制

14.Spring Boot 3.1.5 集成 Spring Security 進行訪問控制 Spring Security 是一個強大且高度可定制的認證和訪問控制框架&#xff0c;專為基于 Spring 的應用程序設計。它為基于 Java EE 的企業應用程序提供了全面的安全解決方案&#xff0c;包括 Web 應用程序安全和方法級安…

Linux學習筆記(二):Linux權限管理

文章目錄 一、Linux下用戶的分類1. Linux下用戶分為兩類&#xff1a;2. 這兩類用戶如何進行切換呢&#xff1f;3. 短暫提權 二、何為權限1. 什么是權限2. Linux的文件后綴意義 三、修改權限1. 設置文件的訪問權限——chmod2. 修改文件擁有者——chown3. 修改文件所屬組——chgr…

學習alpha,第2個alpha

alphas (-1 * ts_corr(rank(ts_delta(log(volume), 2)), rank(((close - open) / open)), 6)) 先分析操作符從左到右 ts_corr: Pearson 相關度量兩個變量之間的線性關系。當變量呈正態分布且關系呈線性時&#xff0c;它最有效。 ts_corr(vwap, close, 20)是一個計算時間序列相…

Paddle Serving|部署一個自己的OCR識別服務器

前言 之前使用C部署了自己的OCR識別服務器&#xff0c;Socket網絡傳輸部分是自己寫的&#xff0c;回過頭來一看&#xff0c;自己犯傻了&#xff0c;PaddleOCR本來就有自己的OCR服務器項目&#xff0c;叫PaddleServing&#xff0c;這里記錄一下部署過程。 1 下載依賴環境 1.1 …

React Native【詳解】搭建開發環境,創建項目,啟動項目

下載安裝 node https://nodejs.cn/download/ 查看 npx 版本 npx -v若無 npx 則安裝 npm install -g npx創建項目 npx create-expo-applatestRN_demo 為自定義的項目名稱 下載安裝 Python 2.7 下載安裝 JAVA JDK https://www.oracle.com/java/technologies/downloads/#jdk24-…

NVIDIA Halos:智能汽車革命中的全棧式安全系統

高級輔助駕駛行業正面臨一個尷尬的"安全悖論"——傳感器數量翻倍的同時&#xff0c;事故率曲線卻遲遲不見明顯下降。究其原因&#xff0c;當前行業普遍存在三大技術困局&#xff1a; 碎片化安全方案 傳統方案就像"打補丁"&#xff0c;激光雷達廠商只管點云…

數據資產管理與AI融合:物聯網時代的新征程

一、引言 在當今數字化浪潮席卷全球的時代&#xff0c;數據資產已成為企業和組織的核心競爭力之一。隨著物聯網&#xff08;IoT&#xff09;技術的飛速發展&#xff0c;海量的數據如潮水般涌來&#xff0c;如何高效地管理和利用這些數據資產成為了亟待解決的問題。與此同時&am…

MySQL 表的內外連接

文章目錄 表的內外連接&#xff08;重點&#xff09;內連接外連接左外連接右外連接 表的內外連接&#xff08;重點&#xff09; 內連接 內連接實際上就是利用where子句對兩種表形成的笛卡兒積進行篩選&#xff0c;我們前面學習的查詢都是內連接&#xff0c;也是在開發過程中使…

VTK 交互類介紹

基本概念 交互器(Interactor): 處理用戶輸入事件的基礎類 交互樣式(InteractorStyle): 定義具體的交互行為 Widgets: 可交互的UI組件,如滑塊、按鈕等 Picker: 用于選擇場景中的對象 常用交互類 類名功能描述vtkRenderWindowInteractor渲染窗口交互器vtkInteractorStyle交互樣式…