欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

vue3父子通信ref,toRef,toRefs使用實(shí)例詳解

 更新時(shí)間:2023年10月08日 15:37:47   作者:qq_42750608  
這篇文章主要介紹了vue3父子通信ref,toRef,toRefs使用實(shí)例詳解,分別介紹了ref是什么、toRef是什么及toRefs是什么和最佳使用方式,結(jié)合示例代碼給大家講解的非常詳細(xì),需要的朋友可以參考下

ref是什么?

  • 生成值類型的響應(yīng)式數(shù)據(jù)
  • 可用于模板和reactive
  • 通過.value修改值
  • 可以獲取DOM元素

<p ref=”elemRef”>{{nameRef}} -- {{state.name}}</p>

// 獲取dom元素

onMounted(()=>{ console.log(elemRef.value); });

toRef是什么?

  • 針對(duì)一個(gè)響應(yīng)式對(duì)象(reactive封裝)的prop屬性!!!
  • 創(chuàng)建一個(gè)ref, 具有響應(yīng)式
  • 兩者保持引用關(guān)系

toRefs是什么?

  • 將響應(yīng)式對(duì)象(reactive封裝)轉(zhuǎn)換為普通對(duì)象
  • 對(duì)象的每個(gè)prop屬性都是對(duì)應(yīng)的ref
  • 兩者保持引用關(guān)系

最佳使用方式

  • 用reactive做對(duì)象的響應(yīng)式, 用ref做值類型響應(yīng)式
  • 需要解構(gòu)響應(yīng)式對(duì)象使用toRefs(state), 只需要獲取單個(gè)響應(yīng)式值類型使用toRef(state, ‘xxx’);
  • ref的變量命名都用xxRef
  • 合成函數(shù)返回響應(yīng)式對(duì)象時(shí), 用toRefs(usexx這種鉤子函數(shù));

使用示例:

1. 子組件, script標(biāo)簽是這種寫法: <script setup lang="ts">時(shí)

<script setup lang="ts">
import { ref, reactive, toRef, toRefs, defineProps } from 'vue';
// 父組件傳數(shù)據(jù) :msg="xxx"
defineProps({
  msg: String
});
// 子組件通知父組件使用@onSayHello="xxx", 子組件需要使用時(shí)eg: emites('onSayHello', 'hello啊啊啊啊')
interface IEmits {
  (e: 'onSayHello', arg1: String): void;
}
const emites = defineEmits<IEmits>();
const state = reactive({
  name: 'alice',
  age: 20,
  sex: '女'
});
// 將reactive封裝的對(duì)象, 使用toRefs獲取的對(duì)象, 它可以進(jìn)一步解構(gòu), 獲取響應(yīng)式值類型變量
const stateRef = toRefs(state);
const { name: nameRef, age: ageRef } = stateRef
// 將reactive封裝的對(duì)象, 使用toRef獲取某個(gè)屬性值, 具備響應(yīng)式
const sexRef = toRef(state, 'sex')
const sayHello2 = () => {
  msgRef.value = '你好!'
  emites('onSayHello', 'hello-----')
}
// xx.key = ???適用于reactive封裝的響應(yīng)式對(duì)象
const updateState = () => {
  state.name = '雙雙';
  state.age = 22;
  state.sex = '男';
  // 或者找到響應(yīng)式值類型,使用 .value進(jìn)行修改
  // nameRef.value = '雙雙'
  // ageRef.value = 22
  // sexRef.value = '男'
}
// ref值類型, 使用.value進(jìn)行修改
const updateRef = () => {
  msgRef.value = 'hello!'
}
const msgRef = ref('值類型');
</script>
<template>
  <h1>{{ msg }}</h1>
  <h1>{{ msgRef }}, 我叫:{{ nameRef }}, 年齡:{{ ageRef }}, 性別:{{ sexRef }}</h1>
  <button @click="sayHello2">打招呼</button>
  <button @click="updateState">修改名字,年齡,性別</button>
  <button @click="updateRef">用英文打招呼</button>
</template>
<style scoped>
.read-the-docs {
  color: #888;
}
button {
  margin: 10px;
}
</style>

2. 子組件, script標(biāo)簽是這種寫法: <script>時(shí)

<script>
import { ref, reactive, toRef, toRefs } from 'vue'
export default {
  props: {
    msg: String
  },
  emits: ['onSayHello'],
  setup(props, { emit }) {
    console.log(props); // 父組件傳進(jìn)來的數(shù)據(jù)
    const state = reactive({
      name: 'alice',
      age: 20,
      sex: 1
    });
    // 將reactive封裝的對(duì)象, 使用toRefs獲取的對(duì)象, 它可以進(jìn)一步解構(gòu), 獲取響應(yīng)式值類型變量
    const stateRef = toRefs(state);
    const { name: nameRef, age: ageRef } = stateRef
    // 將reactive封裝的對(duì)象, 使用toRef獲取某個(gè)屬性值, 具備響應(yīng)式
    const sexRef = toRef(state, 'sex')
    const sayHello2 = () => {
      msgRef.value = 'hello, 你好!'
      emit('onSayHello', 'hello-----')
    }
    // xx.key = ???適用于reactive封裝的響應(yīng)式對(duì)象
    const updateState = () => {
      state.name = '雙雙';
      state.age = 22;
      state.sex = 0;
    }
    // ref值類型, 使用.value進(jìn)行修改
    const updateRef = () => {
      msgRef.value = '你好啊!'
      ageRef.value = 33
      sexRef.value = '男'
    }
    const msgRef = ref('值類型');
    // 注意要返回變量和方法等模板需要使用的東西, 否則頁面不會(huì)渲染
    return {
      msgRef,
      sayHello2,
      nameRef,
      ageRef,
      sexRef,
      updateState,
      updateRef,
    }
  }
}
</script>
<template>
  <h1>{{ msgRef }}, 我叫:{{ nameRef }}, 年齡:{{ ageRef }}, 性別:{{ sexRef }}</h1>
  <button @click="sayHello2">say hello</button>
  <button @click="updateState">修改state的值</button>
  <button @click="updateRef">修改ref的值</button>
</template>
<style scoped>
button {
  margin: 10px;
}
</style>

父組件: App.vue

<script setup>
import HelloWorld from './components/Test2.vue'
function onSayHello(a) {
  console.log(a)
}
</script>
<template>
  <HelloWorld msg="Vite + Vue" @onSayHello="onSayHello"/>
</template>
<style scoped>
.logo.vue:hover {
  filter: drop-shadow(0 0 2em #42b883aa);
}
</style>

到此這篇關(guān)于vue3父子通信+ref,toRef,toRefs使用實(shí)例的文章就介紹到這了,更多相關(guān)vue3 ref toRef toRefs使用內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • vue頁面params傳值的坑及解決

    vue頁面params傳值的坑及解決

    這篇文章主要介紹了vue頁面params傳值的坑及解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-05-05
  • TSX常見簡單入門用法之Vue3+Vite

    TSX常見簡單入門用法之Vue3+Vite

    Vue3的確可以直接使用tsx開發(fā),唯一需要處理的就是children,而且處理起來還是比較不爽的,下面這篇文章主要給大家介紹了關(guān)于TSX常見簡單入門用法之Vue3+Vite的相關(guān)資料,需要的朋友可以參考下
    2022-08-08
  • Vue動(dòng)態(tài)組件與內(nèi)置組件淺析講解

    Vue動(dòng)態(tài)組件與內(nèi)置組件淺析講解

    閑話少說,我們進(jìn)入今天的小小五分鐘學(xué)習(xí)時(shí)間,前面我們了解了vue的組件,我們本文主要是講解vue的動(dòng)態(tài)組件和內(nèi)置組件,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-08-08
  • 一文了解Vue中的nextTick

    一文了解Vue中的nextTick

    Vue中的 nextTick 涉及到Vue中DOM的異步更新,感覺很有意思,特意了解了一下。其中關(guān)于 nextTick 的源碼涉及到不少知識(shí),很多不太理解,暫且根據(jù)自己的一些感悟介紹下 nextTick
    2019-05-05
  • 在 Vue 項(xiàng)目中引入 tinymce 富文本編輯器的完整代碼

    在 Vue 項(xiàng)目中引入 tinymce 富文本編輯器的完整代碼

    這篇文章主要介紹了在 Vue 項(xiàng)目中引入 tinymce 富文本編輯器的實(shí)例代碼,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2018-05-05
  • vue2?利用echarts?單獨(dú)繪制省份的步驟

    vue2?利用echarts?單獨(dú)繪制省份的步驟

    這篇文章主要介紹了vue2?利用echarts?單獨(dú)繪制省份,首先引入所需要的第三方模塊,通過示例代碼給大家介紹的非常詳細(xì),文章末尾給大家補(bǔ)充介紹了vue2.x結(jié)合echarts2實(shí)現(xiàn)顯示具體省份熱力圖的問題,需要的朋友可以參考下
    2022-01-01
  • Vite的常見配置選項(xiàng)詳細(xì)說明

    Vite的常見配置選項(xiàng)詳細(xì)說明

    相信大部分兄弟都體驗(yàn)過Vite了,都知道它很快,在學(xué)習(xí)的時(shí)候,官網(wǎng)上的各種配置也是看的眼花繚亂,不知道哪些是必要掌握的,下面這篇文章主要給大家介紹了關(guān)于Vite常見配置選項(xiàng)的相關(guān)資料,需要的朋友可以參考下
    2024-09-09
  • 強(qiáng)烈推薦!Vue3.2中的setup語法糖

    強(qiáng)烈推薦!Vue3.2中的setup語法糖

    script?setup是vue3的新語法糖,并不是新增的功能模塊,只是簡化了以往的組合式API必須返回(return)的寫法,并且有更好的運(yùn)行時(shí)性能,這篇文章主要給大家介紹了關(guān)于Vue3.2中setup語法糖的相關(guān)資料,需要的朋友可以參考下
    2021-12-12
  • Vue屏幕自適應(yīng)三種實(shí)現(xiàn)方法詳解

    Vue屏幕自適應(yīng)三種實(shí)現(xiàn)方法詳解

    在實(shí)際業(yè)務(wù)中,我們常用圖表來做數(shù)據(jù)統(tǒng)計(jì),數(shù)據(jù)展示,數(shù)據(jù)可視化等比較直觀的方式來達(dá)到一目了然的數(shù)據(jù)查看,但在大屏開發(fā)過程中,常會(huì)因?yàn)檫m配不同屏幕而感到困擾,下面我們來解決一下這個(gè)不算難題的難題
    2022-11-11
  • vue實(shí)現(xiàn)動(dòng)態(tài)添加元素(可刪除)

    vue實(shí)現(xiàn)動(dòng)態(tài)添加元素(可刪除)

    文章介紹了如何在Vue中動(dòng)態(tài)添加和刪除元素,通過使用Vue的響應(yīng)式數(shù)據(jù)和v-for指令,可以輕松地實(shí)現(xiàn)這一功能,文章還詳細(xì)講解了如何處理元素的添加和刪除事件,以及如何更新視圖以反映這些變化
    2024-12-12

最新評(píng)論