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

vue3如何實現(xiàn)變量雙向綁定

 更新時間:2023年11月16日 08:36:55   作者:夢落飛雪  
這篇文章主要介紹了vue3如何實現(xiàn)變量雙向綁定問題,具有很好的參考價值,希望對大家有所幫助,

vue3實現(xiàn)變量雙向綁定

vue2可以通過data、props、computed等鉤子綁定變量,vue3也有相似的方式,這里只說一下vue2中的data方式在vue3中的寫法

①通過reactive綁定

<templete>
    <div>{{value}}</div>
</templete>
<script lang="ts">
import { toRefs, reactive } from "vue";
export default{
    setup(){
        const data = reactive({
            value:''
        })
        return {
            ...toRefs(data)  //toRefs可以解構data中屬性,屬性也是雙向綁定的,這樣就不用綁定變量時嵌套data了
        }
    }
}
</script>

②通過ref綁定

<templete>
    <div>{{data}}</div>
</templete>
<script lang="ts">
import { onMounted, ref } from "vue";
 
export default{
    setup(){
        let data = ref('測試數(shù)據(jù)1')
        onMounted({
            data.value = '測試數(shù)據(jù)2'
        })
        return {
            data
        }
    }
}
</script>

vue3雙向數(shù)據(jù)綁定、setup 語法糖

組件雙向數(shù)據(jù)綁定

父組件修改值,子組件同步。子組件修改,父組件更新。

<template>
	<input type="text" v-module="name" @update:modelValue="onUpdateName($event)">
</template>

<script>
import { ref } from "vue";

export default {
    setup() {
        const name = ref("");
        
        const onUpdateName = (event) => {
            name.value = event;
        };
        
        return { name, onUpdateName };
    }
}
</script>

向子組件傳遞單個值,通過 props: ["modelValue"] 接收。

子組件改父組件數(shù)據(jù)時,使用 emit("update:modelValue", "新值") 進行修改。

向子組件傳遞多個值,通過 props: ["變量名"] 接收。

子組件改父組件數(shù)據(jù)時,使用 emit("update:變量名", "新值") 進行修改。

customRef

創(chuàng)建一個自定義的 ref 響應式數(shù)據(jù),并對其依賴項跟蹤和更新觸發(fā)進行顯示控制。

實現(xiàn)防抖效果

<template>
	<input type="text" v-model="keyword" />
	<h1>{{ keyword }}</h1>
</template>

<script>
import { customRef } from "Vue";

export default {
    setup() {
        // 調用
        const keyword = myRef("hello", 500);
        
        return { keyword };
    },
};

// 防抖輸入框
function myRef (value, delay) {
    let timer = null;
    return customRef((track, trigger) => {
        return {
            // 讀取數(shù)據(jù)
            get() {
                // 通知vue跟蹤value的變化
                track();
                return value;
            },
            // 更新數(shù)據(jù)
            set(newValue) {
                clearTimeout(timer);
                timer = setTimeout(() => {
                    value = newValue;
                    // 通知vue去重新解析模板
                    trigger();
                }, delay);
            }
        };
    });
};
</script>

setup 語法糖

<script setup></script> 是一種編譯時語法糖,用于在單文件組件中使用組合式API。

代碼更簡潔,性能更強悍,更好的支持 TS。

<!-- 語法格式 -->
<script setup>
// 引入第三方,定義變量、方法等
</script>

defineProps

defineProps 用于接收父組件傳遞過來的值,可以直接使用無需導入。實質上就是一個 Props 對象。

<!-- 父組件 -->
<template>
	<!-- 1.給子組件傳參 -->
	<Test msg="hello world" />
</template>

<script setup>
import Test from '@/components/Test/Test.vue';
</script>
<!-- 子組件 -->
<template>
	<!-- 3.使用傳遞過來的值 -->
	{{ msg }}
</template>

<script setup>
    // 2.接收傳遞過來的 Props
    defineProps({
        msg: {
            type: String,	// 類型
            required: true,	// 是否必傳
        }
    });
    
    // 也可以使用變量接收,使用時要寫 props.msg
    // const props = defineProps({ msg: String })
</script>

defineEmits

自定義事件。

<!-- 子組件 -->
<template>
	<!-- 2.點擊觸發(fā) -->
	<button @click="$emit(delete)">點擊事件</button>
</template>

<script setup>
	// 1.自定義事件
    defineEmits(["delete"])
</script>
<!-- 父組件 -->
<template>
	<!-- 3.觸發(fā)父組件方法 -->
	<Test @delete="onDeleteHandler" />
</template>

<script setup>
import Test from '@/components/Test/Test.vue';

// 4.方法邏輯
const onDeleteHandler () => {
	console.log("deleted");
}
</script>

defineExpose

向組件外暴露數(shù)據(jù)。

<!-- 子組件 -->
<template>
	<button @click="$emit(delete)">點擊事件</button>
</template>

<script setup>
import { ref } from "vue";
const count = ref(0);

// 1. 導出暴露數(shù)據(jù)
defineExpose({ count });
</script>
<!-- 父組件 -->
<template>
	<!-- 3.ref接收數(shù)據(jù) -->
	<Test ref="instance" />
	<button @click="log">獲取instance的值</button>
</template>

<script setup>
import Test from '@/components/Test/Test.vue';
import { ref } from "vue";

// 2. 定義變量接收
const instance = ref(null);

const log = () => {
    // 4.點擊按鈕獲取暴露的數(shù)據(jù)
	console.log(instance.value.count);
}
</script>

總結

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關文章

  • 從vue源碼看props的用法

    從vue源碼看props的用法

    平時寫vue的時候知道 props 有很多種用法,今天我們來看看vue內部是怎么處理 props 中那么多的用法的。非常具有實用價值,需要的朋友可以參考下
    2019-01-01
  • Vue中this.$refs的使用及說明

    Vue中this.$refs的使用及說明

    Vue中this.$refs用于訪問通過ref注冊的元素或組件,需在mounted后使用,可在JS操作DOM或調用子組件方法,注意避免模板中直接使用
    2025-08-08
  • vue實現(xiàn)可拖拽div大小的方法

    vue實現(xiàn)可拖拽div大小的方法

    這篇文章主要介紹了vue實現(xiàn)可拖拽div大小的方法,可封裝為全局方法在項目中所需要地方直接調用(mixins),本文通過實例代碼給大家介紹的非常詳細,需要的朋友可以參考下
    2022-04-04
  • flask和vue前后端分離項目部署的示例代碼

    flask和vue前后端分離項目部署的示例代碼

    本文主要介紹了flask和vue前后端分離項目部署的示例代碼,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-12-12
  • vuejs2.0實現(xiàn)一個簡單的分頁示例

    vuejs2.0實現(xiàn)一個簡單的分頁示例

    本篇文章主要介紹了vuejs2.0實現(xiàn)一個簡單的分頁示例,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-02-02
  • 詳解mpvue開發(fā)小程序小總結

    詳解mpvue開發(fā)小程序小總結

    這篇文章主要介紹了詳解mpvue開發(fā)小程序小總結,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-07-07
  • 詳解Vue如何支持JSX語法

    詳解Vue如何支持JSX語法

    這篇文章主要介紹了詳解Vue如何支持JSX語法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-11-11
  • 創(chuàng)建和運行Vue.js項目方法demo

    創(chuàng)建和運行Vue.js項目方法demo

    這篇文章主要為大家介紹了創(chuàng)建和運行Vue.js項目方法demo,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-12-12
  • vue移動端微信授權登錄插件封裝的實例

    vue移動端微信授權登錄插件封裝的實例

    今天小編就為大家分享一篇vue移動端微信授權登錄插件封裝的實例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-08-08
  • 詳解Vue中Axios封裝API接口的思路及方法

    詳解Vue中Axios封裝API接口的思路及方法

    這篇文章主要介紹了詳解Vue中Axios封裝API接口的思路及方法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-10-10

最新評論

岑溪市| 昌吉市| 江永县| 成安县| 碌曲县| 西吉县| 政和县| 师宗县| 渭源县| 陇南市| 贺州市| 大邑县| 安丘市| 浦城县| 江阴市| 嫩江县| 五台县| 乐都县| 乐昌市| 中江县| 福州市| 忻州市| 呈贡县| 河南省| 大安市| 东城区| 阿克陶县| 奉节县| 东源县| 宁德市| 来安县| 无极县| 方城县| 巴马| 漳州市| 措勤县| 岢岚县| 邵东县| 临沧市| 呼玛县| 都昌县|