Vue的學習 —— <vue響應式基礎>

目錄

前言

正文

單文件組件

什么是單文件組件

單文件組件使用方法

數據綁定

什么是數據綁定

數據綁定的使用方法

響應式數據綁定

響應式數據綁定的使用方法

ref() 函數

reactive()函數

toRef()函數

toRefs()函數

案例練習


前言

Vue.js 以其高效的數據綁定和視圖更新機制廣受開發者喜愛。這一特性主要依賴于其獨特的響應式系統設計,它能夠實時監測數據變化并自動驅動相應的視圖更新。簡單來說,就是當數據發生變化時,依賴該數據的視圖會自動進行更新這種“響應”是通過在初始化階段對數據對象屬性進行深度觀測和轉換來實現的。

正文

單文件組件

什么是單文件組件

在第二章中,我們使用Vite創建了一個Vue項目,并且注意到目錄結構中包含了一些擴展名為.vue的文件。這些.vue文件實際上是用來定義Vue的單文件組件。在Vue中,單文件組件是一種特殊的文件格式,用于構建用戶界面。一個.vue文件可以看作是一個獨立的組件單元,它包含了組件的模板、腳本和樣式。這種格式使得組件的代碼更加清晰和易于維護。在每個.vue文件中,你可以編寫HTML結構作為模板部分,JavaScript代碼作為腳本部分以及CSS樣式作為樣式部分

通過使用單文件組件,可以將組件的邏輯、結構和樣式封裝在一起,使得組件的復用和組織更加方便。這有助于提高代碼的可讀性和可維護性,以及加快開發速度。

每個單文件組件由模板、樣式和邏輯3個部分構成:

  1. 模板:模板用于搭建當前組件的DOM結構,其代碼寫在<template>標簽中

  2. 樣式:樣式是指通過CSS代碼為當前組件設置樣式,其代碼寫在<style>標簽中

  3. 邏輯:邏輯是指通過JavaScript代碼處理組件的數據與業務,其代碼寫在<script>標簽中

下面是一個單文件組件的代碼結構:

<template>
<!-- 此處編寫組件的結構,HTML代碼 -->
</template>
<script>
/* 此處編寫組件的JavaScript代碼 */
</script>
<style>
/* 此處編寫組件的樣式 */
</style>

單文件組件使用方法

下面演示如何使用單文件組件:

  1. 在D:\webProject目錄下創建Demo02文件夾,在cmd命令行中使用Vite創建一個名為vue-demo項目用于存放本案例的演示代碼

  2. 項目創建完成后,執行如下命令進入項目目錄并啟動項目:

    cd D:\webProject\Demo02\vue-demo
    yarn -i 
    yarn dev
  3. 使用VS Code編輯器打開D:\webProject\Demo02\vue-demo項目目錄

  4. 將項目目錄下src\style.css文件中的樣式代碼全部刪除,從而避免項目創建時自帶的樣式代碼影響本案例的實現效果

  5. 創建src\components\SingleFileComponent.vue文件,該文件是名為singleFileComponent的單文件組件,并寫入如下代碼:

    <template><div id="singleFileComponent">我是一個單文件組件</div>
    </template>
    <style>
    #singleFileComponent {font-size: 22px;font-weight: bold;
    }
    </style>
  6. 修改src\main.js文件,切換頁面中顯示的組件并取消在main.js文件中引入第四步刪除的樣式文件

    // import './style.css' 刪除這一行
    import App from './components/Demo.vue'
  7. 保存上述代碼后,在瀏覽器中訪問http://127.0.0.1:5173/,SingleFileComponent組件的頁面效果如下圖所示

數據綁定

什么是數據綁定

Vue通過數據綁定實現了數據與頁面相分離,從而實現了數據驅動視圖的效果。即將頁面中的數據分離出來,放到組件的<script>標簽中,通過程序操作數據,并且當數據改變時,頁面會自動發生改變。

數據綁定分為定義數據和輸出數據:

  1. 定義數據:由于數據和頁面是分離的,在實現數據顯示之前,需要先在<script>標簽中定義組件所需的數據,偽代碼如下:

    <script>
    export default {setup() {return {數據名: 數據值,……}}
    }
    </script>
  2. 輸出數據:Vue為開發者提供了Mustache語法(又稱為雙大括號語法),將數據輸出到頁面中,偽代碼如下:

    <template><div>{{ 數據名 }}<!-- 在Mustache語法中還可以將表達式的值作為輸出內容。表達式的值可以是字符串、數字等類型,代碼如下 -->{{ 數據名 === '張' ? '張先生' : 數據名}}</div>
    </template>

為了讓代碼更簡潔,Vue 3提供了setup語法糖(Syntactic Sugar),使用它可以簡化上述語法,提高開發效率,使用setup語法糖來定義數據的語法格式如下:

<script setup>
const 數據名 = 數據值
</script>

數據綁定的使用方法

下面演示數據綁定的使用方法:

  1. 創建src\components\DataBind.vue文件用于存放演示代碼
  2. ?定義message數據,并在模板中輸出,DataBind.vue文件代碼如下
<template><!-- 輸出數據 -->{{ message }}
</template>
<script setup>
// 定義數據
const message = "操千曲而后曉聲,觀千劍而后識器"
</script>
<style>
</style>

3. 修改src\main.js文件,切換頁面中顯示的組件

import App from './components/DataBind.vue'

4. 保存代碼,使用瀏覽器訪問http://127.0.0.1:5173/,最終效果如下圖所示:

響應式數據綁定

響應式數據綁定是Vue開發中一種重要的技術,用于實現頁面數據的實時更新。當數據發生變化時,頁面能夠自動更新,而不需要手動重新渲染,如果想要實現頁面中數據的更新,則需要進行響應式數據綁定,也就是將數據定義成響應式數據。下面是關于響應式數據綁定的詳細解釋:

  1. 數據與視圖的同步:在Vue項目開發中,通常會有數據和視圖兩個部分。數據存儲在變量中,而視圖是數據的呈現。響應式數據綁定能夠確保當數據發生變化時,視圖會自動更新。

  2. 依賴關系:要實現數據與視圖的同步,我們需要明確數據與視圖之間的依賴關系。當數據發生變化時,視圖需要重新渲染,反之,當視圖因為某些操作(如用戶輸入)發生變化時,也需要能夠反映到數據上。

總的來說,響應式數據綁定是前端開發中的一個重要概念,它使得開發者能夠更加專注于業務邏輯的實現,而不需要過多關注數據的同步問題。

Vue為開發者提供了以下四個函數用來定義響應式數據:

  1. ref()函數:用于將數據轉換成響應式數據,其參數為數據,返回值為轉換后的響應式數據。使用ref()函數操作響應式數據的偽代碼如下:

    // 定義響應式數據
    響應式數據 = ref(數據)
    // 修改響應式數據
    響應式數據.value = 新的值
  2. reactive()函數:用于創建一個響應式對象或數組,將普通的對象或數組作為參數傳給該函數即可。使用reactive()函數操作響應式數據的偽代碼如下:

    // 定義響應式對象或數組
    響應式對象或數組 = reactive(普通的對象或數組) 
    // 修改響應式對象
    響應式對象.屬性 = 新值
    // 修改響應式數組
    響應式數組[index] = 新值
  3. toRef()函數:toRef()函數用于將響應式對象中的單個屬性轉換為響應式數據,使用toRef()函數操作響應式數據的偽代碼如下:

    響應式數據 = toRef(響應式對象, '屬性名')
  4. toRefs()函數:

響應式數據綁定的使用方法

ref() 函數
  1. 創建src\components\RefDemo.vue文件用于存放演示代碼,寫入如下代碼:

    <template><!-- 輸出message響應式數據 -->{{ message }}
    </template>
    <script setup>
    import { ref } from 'vue';
    ?
    const message = ref("不積跬步,無以至千里。不積小流,無以成江河")
    // 在頁面加載完成后3秒修改響應式數據內容
    setTimeout(() => message.value = '會當凌絕頂,一覽眾山小' , 3000)
    ?
    </script>
    <style>
    </style>
  2. 修改src\main.js文件,切換頁面中顯示的組件

    import App from './components/RefDemo.vue'
  3. 保存代碼,使用瀏覽器訪問http://127.0.0.1:5173/,頁面打開后初始效果如下圖所示:

  4. 等待3秒后的頁面效果如下圖所示:

reactive()函數
  1. 創建src\components\ReactiveDemo.vue文件用于存放演示代碼,寫入如下代碼:

    <template>{{ obj.message }}
    </template>
    <script setup>
    import { reactive } from 'vue'
    const obj = reactive({ message: '窮且益堅,不墜青云之志' })
    ?
    setTimeout(() => obj.message = '人有逆天之時,天無絕人之路', 3000)
    </script>
  2. 修改src\main.js文件,切換頁面中顯示的組件

    import App from './components/ReactiveDemo.vue'
  3. 保存代碼,使用瀏覽器訪問http://127.0.0.1:5173/,頁面打開后初始效果如下圖所示:

  4. 等待3秒后的頁面效果如下圖所示:

toRef()函數
  1. 創建src\components\ToRefDemo.vue文件用于存放演示代碼,寫入如下代碼:

    <template><div>message的值:{{ message }}</div><div>obj.message的值:{{ obj.message }}</div>
    </template>
    <script setup>
    import { reactive, toRef } from 'vue'
    ?
    const obj = reactive({ message: '三更燈火五更雞,正是男兒讀書時' })
    ?
    const message = toRef(obj, 'message')
    // 延時3秒修改響應式對象屬性
    setTimeout(() => message.value = '咬定青山不放松,立根原在破巖中', 3000)
    ?
    </script>
  2. 修改src\main.js文件,切換頁面中顯示的組件

    import App from './components/ToRefDemo.vue'
  3. 保存代碼,使用瀏覽器訪問http://127.0.0.1:5173/,頁面打開后初始效果如下圖所示:

  4. 等待3秒后的頁面效果如下圖所示:

toRefs()函數
  1. 創建src\components\ToRefsDemo.vue文件用于存放演示代碼,寫入如下代碼:

    <template><div>message的值:{{ message }}</div><div>obj.message的值:{{ obj.message }}</div>
    </template>
    <script setup>
    import { reactive, toRefs } from 'vue'
    ?
    const obj = reactive({ message: '盛年不重來,一日難再晨' })
    ?
    let { message } = toRefs(obj)
    ?
    setTimeout(() => message.value = '及時當勉勵,歲月不待人', 3000)
    </script>
  2. 修改src\main.js文件,切換頁面中顯示的組件

    import App from './components/ToRefsDemo.vue'
  3. 保存代碼,使用瀏覽器訪問http://127.0.0.1:5173/,頁面打開后初始效果如下圖所示:

  4. 保存代碼,使用瀏覽器訪問http://127.0.0.1:5173/,頁面打開后初始效果如下圖所示:

案例練習

結合Vue3組合式API,在頁面中實時顯示當前時間,時間顯示年-月-日 時:分:秒.毫秒。

案例實現:

<template><div>{{ current }}</div>
</template>
<style></style>
<script setup>
import { ref,reactive,onMounted } from 'vue'
const current = ref('')
const flush = () => {let now = new Date();let hours = now.getHours().toString().padStart(2, '0');let minutes = now.getMinutes().toString().padStart(2, '0');let seconds = now.getSeconds().toString().padStart(2, '0');let milliseconds = now.getMilliseconds().toString().padStart(3, '0');// 格式化為 "yyyy-MM-dd HH:mm:ss.sss"let formattedTime = `${now.getFullYear()}-${now.getMonth()+1}-${now.getDate()} ${hours}:${minutes}:${seconds}.${milliseconds}`;current.value = formattedTime
}
setInterval(flush,1)
</script>

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

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

相關文章

探索大語言模型代理(Agent):研究背景、通用框架與未來展望

引言 近年來&#xff0c;隨著人工智能技術的飛速發展&#xff0c;大語言模型&#xff08;Large Language Models, LLMs&#xff09;在智能代理&#xff08;Agent&#xff09;領域中的應用已成為研究的熱點。這些代理不僅能夠模擬人類的認知過程&#xff0c;還能在復雜的社會環…

CNN/TCN/LSTM/BiGRU-Attention到底哪個模型效果最好?注意力機制全家桶來啦!

? 聲明&#xff1a;文章是從本人公眾號中復制而來&#xff0c;因此&#xff0c;想最新最快了解各類智能優化算法及其改進的朋友&#xff0c;可關注我的公眾號&#xff1a;強盛機器學習&#xff0c;不定期會有很多免費代碼分享~ 目錄 數據介紹 效果展示 原理簡介 代…

數字人解決方案——AniTalker聲音驅動肖像生成生動多樣的頭部說話視頻算法解析

1.概述 AniTalker是一款先進的AI驅動的動畫生成工具&#xff0c;它超越了簡單的嘴唇同步技術&#xff0c;能夠精準捕捉并再現人物的面部表情、頭部動作以及其他非言語的微妙動態。這不僅意味著AniTalker能夠生成嘴型精準同步的視頻&#xff0c;更重要的是&#xff0c;它還能夠…

使用Dockerfile配置Springboot應用服務發布Docker鏡像-16

創建Docker鏡像 springboot-docker模塊 這個應用可以隨便找一個即可&#xff0c;這里不做詳細描述了。 pom.xml 依賴版本可參考 springbootSeries 模塊中pom.xml文件中的版本定義 <dependencies><dependency><groupId>com.alibaba.cloud</groupId>…

linux開機啟動配置文件

在Linux系統中&#xff0c;開機啟動配置文件通常位于/etc/init.d目錄下&#xff0c;并且是一個腳本文件&#xff0c;該腳本可以通過service命令或systemctl命令來啟動、停止、重啟服務。 1、創建一個服務腳本 /etc/init.d/ruoyi.sh #!/bin/bashCURRENT_PATH$(pwd) JAR_NAME&q…

企業開發基礎-JDBC(SQL注入)

JDBC概論 1、JDBC是什么&#xff1f; Java DataBase Connectivity&#xff08;Java語言連接數據庫&#xff09; 2、JDBC的本質是什么&#xff1f; JDBC是SUN公司制定的一套接口&#xff08;interface&#xff09; java.sql.*; (這個軟件包下有很多接口。) 接…

[數據集][圖像分類]雜草分類數據集17509張9類別

數據集格式&#xff1a;僅僅包含jpg圖片&#xff0c;每個類別文件夾下面存放著對應圖片 圖片數量(jpg文件個數)&#xff1a;17509 分類類別數&#xff1a;9 類別名稱:["chineseapple","lantana","negatives","parkinsonia","part…

48-Qt控件詳解:Buttons Containers2

一 Group Box:組合框 #include "widget.h"#include<QGroupBox> #include<QRadioButton> #include<QPushButton> #include<QVBoxLayout>//可以在水平方向和垂直方向進行排列的控件&#xff0c;QHBoxLayout/QVBoxLayout #include <QGridLa…

vue2 el-tree樹形下拉框

由于element-vue2 中沒有el-tree-select組件&#xff0c;所以樹形下拉需要結合el-selet完成 <el-form-item label"上級部門&#xff1a;" prop"pidName"> <el-select ref"select" v-model"dialogForm.pidName" placeholder&…

Backend - 數據分析 Numpy

目錄 一、作用 二、基礎環境 &#xff08;一&#xff09;執行虛擬環境的終端命令 &#xff08;二&#xff09;代碼中導包 三、數組操作 &#xff08;一&#xff09;創建數組 1. 創建一維數組 &#xff08;1&#xff09;基本建立 &#xff08;2&#xff09;建立后&…

揚州知識付費系統招聘,你知道在線教育平臺推廣有什么技巧?

在線教育的模式有各種各樣&#xff0c;不管是哪種模式&#xff0c;在線教育的課程都有顛覆和創新性。互聯網在線教育課程可以要大家在家就可以利用碎片化時間學習&#xff0c;那在線教育平臺怎么推廣呢&#xff1f; 1、與校園和企業合作 在線教育平臺不僅能給校園的老師提供更好…

解決寶塔Nginx和phpMyAdmin配置端口沖突問題

問題描述 在對基于寶塔面板的 Nginx 配置文件進行端口修改時&#xff0c;我注意到 phpMyAdmin 的端口配置似乎也隨之發生了變化&#xff01; 解決方法 官方建議在處理 Nginx 配置時&#xff0c;應避免直接修改默認的配置文件&#xff0c;以確保系統的穩定性和簡化后續的維護…

大數據可視化實驗三——數據可視化工具使用

目錄 一、實驗目的... 1 二、實驗環境... 1 三、實驗內容... 1 1. 下載并安裝Tableau軟件.. 1 2. 使用HTML5繪制Canvas圖形.. 2 3. 使用HTML5編寫SVG 圖形... 5 4. 使用R 語言編寫可視化實例.. 7 四、總結與心得體會... 7 五、思考問題... 8 一、實驗目的 1&#xff…

C++-Linux工程管理

1 Makefile和CMake實踐 1.1 Makefile 參考 簡介&#xff1a; Makefile是一種用于自動化構建和管理程序的工具。它通常用于編譯源代碼、鏈接對象文件以生成可執行文件或庫文件。Makefile以文本文件的形式存在&#xff0c;其中包含了一系列規則和指令&#xff0c;用于描述程序的…

python數據分析——seaborn繪圖1

參考資料&#xff1a;活用pandas庫 matplotlib庫是python的和興繪圖工具&#xff0c;而seaborn基于matplotlib創建&#xff0c;它為繪制統計圖提供了更高級的接口&#xff0c;使得只用少量代碼就能生成更美觀、更復雜的可視化效果。 seaborn庫和pandas以及其他pydata庫&#xf…

Go 阻塞

阻塞 在Go語言中&#xff0c;阻塞通常指的是一個goroutine&#xff08;輕量級線程&#xff09;在等待另一個goroutine完成操作&#xff08;如I/O操作、channel通信等&#xff09;時&#xff0c;暫時停止執行的現象。Go語言提供了多種同步和通信機制&#xff0c;可以用于實現阻…

數據賦能(86)——數據要素:管理核心框架

數據管理的核心框架是一個綜合性的體系&#xff0c;旨在確保數據的有效利用、安全性以及合規性。這個框架主要包含了以下幾個關鍵組成部分&#xff1a; 數據治理策略與目標&#xff1a;明確數據管理的整體戰略和目標&#xff0c;包括數據價值的釋放、數據資產地位的確定、多元…

OpenHarmony 實戰開發——移植通信子系統

通信子系統目前涉及Wi-Fi和藍牙適配&#xff0c;廠商應當根據芯片自身情況進行適配。 移植指導 Wi-Fi編譯文件內容如下&#xff1a; 路徑&#xff1a;“foundation/communication/wifi_lite/BUILD.gn” group("wifi") {deps [ "$ohos_board_adapter_dir/ha…

C++基礎與深度解析 | 數組 | vector | string

文章目錄 一、數組1.一維數組2.多維數組 二、vector三、string 一、數組 1.一維數組 在C中&#xff0c;數組用于存儲具有相同類型和特定大小的元素集合。數組在內存中是連續存儲的&#xff0c;并且支持通過索引快速訪問元素。 數組的聲明&#xff1a; 數組的聲明指定了元素的…

前端人員如何理解進程和線程

進程和線程的概念&#xff1a; 進程和線程本質都是cpu工作過程的時間片。 進程可以理解為cpu在運行指令即加載保存上下文所要用的時間。也可以理解為一個應用程序運行的實例。 線程是進程中更小的單位&#xff0c;描述一段指令所需要的時間。 進程是資源分配的最小單位&#xf…