【面試 · 一】vue大集合

目錄

vue2

基礎屬性

組件通信

全局狀態管理 vueX

路由

路由守衛

vue3

基礎屬性

組件通信

全局狀態管理 Pinia

路由

路由守衛

vue2、vue3生命周期

setup

vue2

基礎屬性

data:用于定義組件的初始數據,必須是一個函數,返回一個對象,每個組件實例都會有自己的數據對象,避免組件之間數據相互影響。

props:用于接收父組件傳遞的數據,必須是一個數組或對象,數組中的每個元素是一個字符串,表示接收的屬性名,對象中的每個屬性表示接收的屬性名和屬性值的類型。

methods:用于定義組件的方法,每個方法都是一個函數,可以在組件中通過 this 訪問。

watch:用于監聽數據的變化,當數據發生變化時,執行相應的回調函數,可以監聽單個數據或多個數據的變化。

computed:用于計算屬性,根據已有的數據計算出新的數據,可以監聽多個數據的變化,只有當依賴的數據發生變化時才會重新計算。

created:在實例創建完成后立即執行,可以在這個鉤子函數中進行數據初始化、事件監聽等操作。

computed計算屬性

watch

基本使用

 watch: {name: { //這里是要監聽的變量名handler(newValue, oldValue) { //這里的第一個參數是改變后的值,第二個參數是原來的值console.log('改后的值是:' + newValue)console.log('原來的值是:' + oldValue)}}}

簡寫

    watch: {name(newValue, oldValue) { //這里的第一個參數是改變后的值,第二個參數是原來的值console.log('改后的值是:' + newValue)console.log('原來的值是:' + oldValue)}}

immediate:就是當值第一次綁定時,不會執行監聽函數,只有值發生改變時才會執行。如果我們需要在最初綁定值的時候也執行函數,需要用到immediate屬性;

deep:當需要監聽一個對象的改變時,普通的watch方法無法監聽到對象內部屬性的改變,此時就需要deep屬性對對象進行深度監聽,數組字符串一般不需要。

  watch: {name: {handler(newValue, oldValue) {//這里的第一個參數是改變后的值,第二個參數是原來的值console.log('改后的值是:' + newValue)console.log('原來的值是:' + oldValue)},immediate: true,deep:true}}

組件通信

父傳子

子傳父

非父子通信 eventBus事件總線(兄弟組件)

?src/utils/eventBus.js

import Vue from 'vue';
export const EventBus = new Vue();
<template><button @click="sendData">發送數據到組件 B</button>
</template><script>
import { EventBus } from '@/utils/eventBus';export default {methods: {sendData() {EventBus.$emit('dataEvent', '來自組件 A 的數據');}}
};
</script>
<template><p>收到的數據:{{ receivedData }}</p>
</template><script>
import { EventBus } from '@/utils/eventBus';export default {data() {return { receivedData: '' };},created() {EventBus.$on('dataEvent', data => {this.receivedData = data;});},beforeDestroy() {EventBus.$off('dataEvent');}
};
</script>

組件通信——非父子通信 Provide Inject(跨層級組件)

<template><ChildComponent />
</template><script>
export default {provide() {return {sharedMessage: 'Hello from Provide!'};}
};
</script>
<template><p>收到的數據:{{ sharedMessage }}</p>
</template><script>
export default {inject: ['sharedMessage']
};
</script>

組件通信——非父子通信?$attrs ?$listeners

官方文檔介紹:包含了父作用域不作為prop被識別(且獲取)的attribute綁定(class和style除外)。當一個組件沒有生命任何prop時,這里會包含所有父作用域的綁定(class和style除外),并且可以通過v-bind="$attrs"傳入內部組件–在創建高級別的組件時非常有用。

通俗地來說就是如果從父組件傳過來的值,沒有在子組件中被接收,那么這些值就會被存在$attrs對象中。

//Father.vue
<template><div class="father"><span>父親</span><Son :message="message" :age="18"></Son></div>
</template><script>
import Son from "../components/Son.vue";
export default {data() {return {message: "父組件傳過來的值",age: 18,};},components: {Son,},
};
</script>//Son.vue
<template><div class="son"><span>兒子</span><GrandSon v-bind="$attrs"></GrandSon></div>
</template><script>
import GrandSon from "../components/GrandSon.vue";
export default {components: {GrandSon,},created() {console.log("son", this.$attrs);},
};//GrandSon.vue
<template><div class="grandson"><span>孫子</span><div>{{ $attrs.message }}</div></div>
</template><script>
export default {created() {console.log("grandson", this.$attrs);},
};
</script>

組件通信——ref $refs

?引用信息會注冊在父組件的$ref對象上? ?vue2/vue3 ref組件通信

//父
<template><div id="app"><TodoItem ref="msg"></TodoItem><p ref="dom"></p></div>
</template><script>
import TodoItem from './components/so.vue'export default {name: 'App',components: {TodoItem},mounted() {console.log(this.$refs)// 通過這種方法給子組件傳遞數據this.$refs.msg.getmsg("我是tc") // this.$refs.msg指向的是子組件的實例},
}
</script>//子
<template><div class="so"><p>{{ msg }}</p></div>
</template><script>
export default {name: "todo-item",data() {return {msg: ''}},methods: {getmsg(s) {this.msg = s}}
}
</script>

全局狀態管理 vueX

vueX詳解(1)

vueX詳解(2)

路由

路由詳解

路由守衛

路由守衛詳解

vue3

基礎屬性

import { computed, ref } from 'vue';
export default {setup() {const count = ref(0);// 定義一個計算屬性const doubledCount = computed(() => count.value * 2);return {count,doubledCount};}
};

const fullName = computed({// getterget() {return firstName.value + ' ' + lastName.value},// setterset(newValue) {// 注意:我們這里使用的是解構賦值語法[firstName.value, lastName.value] = newValue.split(' ')}
})

watch

//ref
<script setup lang="ts">
import { watch, ref } from 'vue'
const sum=ref(1);
// New: 新值 | Old: 老值
watch(sum,(New, Old)=>{console.log(`新值:${New} ——— 老值:${Old}`)
})
</script>
//reactive
<script setup lang="ts">import { watch,reactive} from 'vue'// 響應式變量const sum = reactive({value: 1})// watch是一個函數// 第一個參數: 要監聽的響應式變量(數據源)// 第二個參數:執行的回調函數// 第三個參數: 配置(例如deep深度監聽/immediate是否立即監聽等)// 注意:當監聽一個對象時,第一個參數數據源必須是函數且返回一個值即 "() => 對象.要監聽的屬性"watch(() => sum.value, (New, Old) => {console.log(`新值:${New} ——— 老值:${Old}`)}, { immediate: true, deep:ture })
</script>

watchEffect

  • 不需要手動傳入依賴(不用指定監聽對象)
  • 無法獲取原始值,只能獲取更新后的值
  • 立即執行(在onMounted前調用)
  • 一些異步操作放里面更加的合適
const count = ref(0)
watchEffect(() => {console.log(count.value)
})
const stop = watchEffect(() => {/* ... */
})
// 停止監聽
stop()

副作用清除??做一些異步請求連發限制或取消請求的操作,保證請求數據的完整和準確性。

watchEffect(async (onCleanup) => {const { response, cancel } = doAsyncWork(id.value)// `cancel` 會在 `id` 更改時調用// 以便取消之前// 未完成的請求onCleanup(cancel)data.value = await response
})

組件通信

父傳子

<Child info="我愛祖國" :money="money"></Child>
子組件獲取父組件傳遞數據:方式1
let props = defineProps({money:{type:Number,default:0
}})子組件獲取父組件傳遞數據:方式2
let props = defineProps(["info",'money']);

子傳父

<Event2  @xxx="handler3"></Event2>
<script setup lang="ts">
let $emit = defineEmits(["xxx"]);
const handler = () => {$emit("xxx", "法拉利", "茅臺");
};
</script>

v-model

<template><child v-model:name="name"></child>
</template><script setup>
import { ref } from 'vue'
import Child from './Child.vue'const name = ref('XXX')
</script>
<template><input :value="name" @input="updateName" />
</template><script setup>
import { defineProps, defineEmits } from 'vue'const props = defineProps(['name'])
const emit = defineEmits(['update:name'])const updateName = (e) => {emit('update:name', e.target.value)
}
</script>

依賴注入 (Provide/Inject)

<script setup>
import { provide, ref } from 'vue'const themeColor = ref('blue')
provide('theme', themeColor)
</script>
<script setup>
import { inject } from 'vue'const theme = inject('theme')
console.log(theme.value) // 'blue'
</script>

ref

<template><TodoItem :ref="(el) => child = el"></TodoItem><p ref="dom"></p>
</template><script>
import TodoItem from './components/so'
import { ref, onMounted  } from 'vue'export default {name: 'App',components: {TodoItem}
}
</script><script setup>const child = ref(null)// const msg = ref()const dom = ref()onMounted(() => {console.log(child.value.getmsg("我是tc"))// msg.value.getmsg("我是tc")dom.value.innerHTML = "我是一個普通的DOM元素"})
</script>
<template><div class="so"><p>{{ msg }}</p></div></template><script setup>
import { ref, defineExpose } from 'vue'const msg = ref("")
const getmsg = (s) => {msg.value = s
}
// 想要父組件可以獲取到需要使用defineExpose向父組件暴露
defineExpose({getmsg})
</script>

事件總線

vue3中移除了事件總線,可以借助于第三方工具來完成,Vue官方推薦 mitt 或 tiny-emitter?

全局狀態管理 Pinia

Pinia詳解

路由

路由詳解

路由守衛

vue2、vue3路由區別及原理

vue3路由守衛詳解

vue2、vue3生命周期

setup

setup() 鉤子是在組件中使用組合式 API 的入口

vue3 setup

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

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

相關文章

nginx之proxy_redirect應用

一、功能說明 proxy_redirect 是 Nginx 反向代理中用于修改后端返回的響應頭中 Location 和 Refresh 字段的核心指令&#xff0c;主要解決以下問題&#xff1a;協議/地址透傳錯誤&#xff1a;當后端返回的 Location 包含內部 IP、HTTP 協議或非標準端口時&#xff0c;需修正為…

[Qt] mvd使用的注意事項

在使用mvd時&#xff0c;我們可能會有這種需求&#xff0c;比如有一項的數據是文件類型&#xff0c;然后我們要彈出一個文件對話框&#xff0c;選擇一個文件路徑然后把文件路徑展示出來。 我們可能寫出如下代碼 #include "MyStyledItemDeletegate.h" #include <Q…

LeetCode 220 存在重復元素 III 題解

LeetCode 220 存在重復元素 III 題解 題目描述 給定一個整數數組 nums 和兩個整數 k 和 t&#xff0c;請判斷數組中是否存在兩個不同的索引 i 和 j&#xff0c;使得&#xff1a; abs(nums[i] - nums[j]) < tabs(i - j) < k 方法思路&#xff1a;桶排序 滑動窗口 核…

路由器詳細講解

目錄 一、路由器的定義和基本功能 二、路由器的分類 三、路由器的工作原理 四、路由器的配置 五、路由器的選購要點 路由器是一種網絡設備&#xff0c;它在計算機網絡中扮演著至關重要的角色&#xff0c;主要用于連接不同的網絡&#xff0c;并根據數據包的目的地址選擇合適…

Spring MVC @CookieValue 注解怎么用?

CookieValue 注解的作用 CookieValue 注解用于將 HTTP 請求中特定 Cookie 的值綁定到 Controller 方法的參數上。 Cookies 是由服務器發送到用戶瀏覽器并保存在本地的一小塊數據。瀏覽器在后續向同一服務器發送請求時&#xff0c;會通過 Cookie 請求頭將這些數據再帶回給服務…

控制mac地址表端口安全

一、端口安全的核心理論 安全MAC地址類型 安全動態MAC&#xff1a;啟用端口安全后動態學習的MAC地址&#xff0c;設備重啟后丟失&#xff0c;需重新學習。 安全靜態MAC&#xff1a;手動配置的MAC地址&#xff0c;永久生效且不會被老化。 Sticky MAC&#xff1a;動態學習后自動…

【wpf】10 C#樹形控件高效實現:遞歸構建與路徑查找優化詳解

在WPF應用程序開發中&#xff0c;樹形控件的實現是常見且具有挑戰性的需求。本文將深入解析一套高效樹形結構的實現方案&#xff0c;包含遞歸構建、路徑查找優化、動態交互等多個關鍵技術點。 一、遞歸構建樹形結構 private TreeItem CreateTreeViewItem(TreeNode node) {var…

面向未來的 TCP 協議設計:可擴展與兼容并存

目錄 1.設計思路 &#xff08;1&#xff09;完整數據結構&#xff08;字節布局&#xff09; 1&#xff09;字段解釋&#xff1a; 2&#xff09;Flags字段設計&#xff08;1字節位圖&#xff09; &#xff08;2&#xff09;進階版 Java 解碼器實現&#xff08;示例&#xf…

MCP 入門指南

文章來源&#xff1a;https://anmolbaranwal.com/ 本文涵蓋內容如下&#xff1a; 現有AI工具的問題。MCP及其核心組件介紹。MCP 內部是如何工作的&#xff1f;MCP 解決的問題以及它為何重要。MCP 的 3 個層&#xff08;以及我最終如何理解它們&#xff09;。使用內置 Auth 連接…

第 14 屆藍橋杯 C++ 青少組省賽中 / 高級組真題解析

一、選擇題 第 1 題 題目&#xff1a;C 中&#xff0c;bool 類型的變量占用字節數為&#xff08; &#xff09;。 A. 1 B. 2 C. 3 D. 4 答案&#xff1a;A 解析&#xff1a; C 標準規定&#xff0c;bool類型至少占用 1 字節&#xff08;1 byte&#xff09;&#xff0c;用于存…

使用 Selenium 爬取動態網頁數據 —— 實戰與坑點詳解

本文記錄了筆者在爬取網頁數據過程中遇到的各種技術挑戰&#xff0c;包括頁面動態渲染、JavaScript 注入等問題&#xff0c;并最終給出一個可運行的完整方案。 文章目錄 網頁獲取不到數據&#x1f680; 嘗試用 Selenium 渲染頁面 網頁獲取不到數據 某網頁數據依賴大量 JavaSc…

【信息系統項目管理師】法律法規與標準規范——歷年考題(2024年-2020年)

手機端瀏覽?【信息系統項目管理師】法律法規與標準規范——歷年考題&#xff08;2024年-2020年&#xff09; 2024年上半年綜合知識【占比分值3′】 42、關于招標投標的描述&#xff0c;不正確的是&#xff08;屬于同一集團組織成員的投標人可以按照該組織要求協同投標&#xf…

多模態大語言模型arxiv論文略讀(五十六)

DesignQA: A Multimodal Benchmark for Evaluating Large Language Models’ Understanding of Engineering Documentation ?? 論文標題&#xff1a;DesignQA: A Multimodal Benchmark for Evaluating Large Language Models’ Understanding of Engineering Documentation …

Docker 渡渡鳥鏡像同步站 使用教程

Docker 渡渡鳥鏡像同步站 使用教程 &#x1f680; 介紹 Docker.aityp.com&#xff08;渡渡鳥鏡像同步站&#xff09;是一個專注于為國內開發者提供 Docker 鏡像加速和同步服務的平臺。它通過同步官方鏡像源&#xff08;如 Docker Hub、GCR、GHCR 等&#xff09;&#xff0c;為…

Unity:AddTorque()(增加旋轉力矩)

目錄 什么是 AddTorque()&#xff1f; 第一性原理出發&#xff1a;什么是 Torque&#xff08;力矩&#xff09;&#xff1f; Torque 公式 Unity 中 AddTorque 的工作原理 參數屬性 &#x1f50d; Linear Drag&#xff08;線性阻力&#xff09; 線性阻力模擬的現實情況&…

async/await的另一種食用方法

在JavaScript/TypeScript的異步編程中&#xff0c;async/await讓我們的代碼看起來更像是同步的&#xff0c;極大地提高了可讀性。然而&#xff0c;錯誤處理仍然是一個需要仔細考慮的問題。今天我要分享一種優雅的錯誤處理模式&#xff0c;它能讓你的異步代碼更加簡潔。 傳統tr…

計算機網絡 - stp生成樹實驗

【實驗假設】 我們使用 Cisco Packet Tracer 或類似的模擬軟件&#xff0c;或物理的 Cisco 交換機。 交換機初始為默認配置&#xff08;或已通過 write erase 和 reload 清除配置&#xff09;。 PC 已配置 IP 地址如下&#xff08;示例&#xff09;&#xff1a; PC0: 192.168…

淺析 Spring 中 FactoryBean 的實現與使用

淺析 Spring 中 FactoryBean 的實現與使用 一、FactoryBean核心機制剖析二、高級應用場景與實戰三、框架級應用案例解析四、FactoryBean常見面試題 一、FactoryBean核心機制剖析 1. 本質與雙重角色 FactoryBean是Spring容器中用于定制化對象創建的核心接口&#xff08;org.spri…

vue3 element-plus 輸入框回車跳轉頁面問題處理

問題描述&#xff1a; 當頁面搜索條件只有一個的情況下&#xff0c;輸入框不管有沒有值&#xff0c;回車后會跳轉頁面 解決辦法&#xff0c;給表單添加 submit.prevent <el-form ref"ruleForm" :model"search" label-width"120px" class&qu…

(51單片機)LCD展示動畫(延時函數)(LCD1602教程)

前言&#xff1a; 前面我們說過&#xff0c;之前LCD1602模塊有點難&#xff0c;但是現在&#xff0c;我們通過幾遍博客的學習&#xff0c;今天來講一下LCD1602的原理 演示視頻&#xff1a; LCD1602流動 源代碼&#xff1a; main.c #include <STC89C5xRC.H> #include &q…