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

vue3父子通信ref,toRef,toRefs使用實例詳解

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

ref是什么?

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

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

// 獲取dom元素

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

toRef是什么?

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

toRefs是什么?

  • 將響應式對象(reactive封裝)轉換為普通對象
  • 對象的每個prop屬性都是對應的ref
  • 兩者保持引用關系

最佳使用方式

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

使用示例:

1. 子組件, script標簽是這種寫法: <script setup lang="ts">時

<script setup lang="ts">
import { ref, reactive, toRef, toRefs, defineProps } from 'vue';
// 父組件傳數(shù)據(jù) :msg="xxx"
defineProps({
  msg: String
});
// 子組件通知父組件使用@onSayHello="xxx", 子組件需要使用時eg: emites('onSayHello', 'hello啊啊啊啊')
interface IEmits {
  (e: 'onSayHello', arg1: String): void;
}
const emites = defineEmits<IEmits>();
const state = reactive({
  name: 'alice',
  age: 20,
  sex: '女'
});
// 將reactive封裝的對象, 使用toRefs獲取的對象, 它可以進一步解構, 獲取響應式值類型變量
const stateRef = toRefs(state);
const { name: nameRef, age: ageRef } = stateRef
// 將reactive封裝的對象, 使用toRef獲取某個屬性值, 具備響應式
const sexRef = toRef(state, 'sex')
const sayHello2 = () => {
  msgRef.value = '你好!'
  emites('onSayHello', 'hello-----')
}
// xx.key = ???適用于reactive封裝的響應式對象
const updateState = () => {
  state.name = '雙雙';
  state.age = 22;
  state.sex = '男';
  // 或者找到響應式值類型,使用 .value進行修改
  // nameRef.value = '雙雙'
  // ageRef.value = 22
  // sexRef.value = '男'
}
// ref值類型, 使用.value進行修改
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標簽是這種寫法: <script>時

<script>
import { ref, reactive, toRef, toRefs } from 'vue'
export default {
  props: {
    msg: String
  },
  emits: ['onSayHello'],
  setup(props, { emit }) {
    console.log(props); // 父組件傳進來的數(shù)據(jù)
    const state = reactive({
      name: 'alice',
      age: 20,
      sex: 1
    });
    // 將reactive封裝的對象, 使用toRefs獲取的對象, 它可以進一步解構, 獲取響應式值類型變量
    const stateRef = toRefs(state);
    const { name: nameRef, age: ageRef } = stateRef
    // 將reactive封裝的對象, 使用toRef獲取某個屬性值, 具備響應式
    const sexRef = toRef(state, 'sex')
    const sayHello2 = () => {
      msgRef.value = 'hello, 你好!'
      emit('onSayHello', 'hello-----')
    }
    // xx.key = ???適用于reactive封裝的響應式對象
    const updateState = () => {
      state.name = '雙雙';
      state.age = 22;
      state.sex = 0;
    }
    // ref值類型, 使用.value進行修改
    const updateRef = () => {
      msgRef.value = '你好啊!'
      ageRef.value = 33
      sexRef.value = '男'
    }
    const msgRef = ref('值類型');
    // 注意要返回變量和方法等模板需要使用的東西, 否則頁面不會渲染
    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>

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

相關文章

  • vue3時間戳轉換(不使用過濾器)

    vue3時間戳轉換(不使用過濾器)

    這篇文章主要介紹了vue3時間戳轉換,?vue2轉換時間戳的時候一般使用過濾器的方式,到vue3之后,vue3移除了過濾器,就不能再用了,官方是推薦使用方法或者計算屬性的方式。下面我們來看看詳細介紹吧</P><P>
    2021-12-12
  • 深度剖析?Vue3?在瀏覽器的運行原理

    深度剖析?Vue3?在瀏覽器的運行原理

    這篇文章主要介紹了深度剖析Vue3在瀏覽器的運行原理,文章通過圍繞主題展開相關詳細介紹,具有一定的參考價值,需要的小伙伴可以參考一下
    2022-09-09
  • requirejs + vue 項目搭建詳解

    requirejs + vue 項目搭建詳解

    這篇文章主要介紹了requirejs + vue 項目搭建詳解,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-06-06
  • Vue 中的響應式布局最佳實踐

    Vue 中的響應式布局最佳實踐

    Vue中的響應式布局結合CSS和Vue數(shù)據(jù)系統(tǒng),通過CSS媒體查詢和Vue的響應式組件/邏輯實現(xiàn),推薦優(yōu)先使用CSS Grid/Flexbox處理樣式響應,僅在復雜邏輯時使用Vue,本文介紹Vue中的響應式布局,感興趣的朋友跟隨小編一起看看吧
    2026-01-01
  • Vue 事件處理操作實例詳解

    Vue 事件處理操作實例詳解

    這篇文章主要介紹了Vue 事件處理操作,結合實例形式較為詳細的分析了vue.js事件處理相關的事件監(jiān)聽、處理、修飾符等相關概念、用法及操作注意事項,需要的朋友可以參考下
    2019-03-03
  • Vue生命周期詳解

    Vue生命周期詳解

    本文詳細講解了Vue的生命周期,文中通過示例代碼介紹的非常詳細。對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-06-06
  • Vue項目打包后出現(xiàn)的路徑問題以及解決方案

    Vue項目打包后出現(xiàn)的路徑問題以及解決方案

    本文詳細探討了Vue項目打包后常見的路徑問題,包括靜態(tài)資源路徑錯誤、路由路徑錯誤、環(huán)境變量路徑錯誤和publicPath配置錯誤,并提供了相應的解決方案,通過正確配置這些路徑,可以有效解決Vue項目在打包后的資源加載問題,確保項目在生產環(huán)境中的正常運行
    2025-11-11
  • Avue自定義formslot調用rules自定義規(guī)則方式

    Avue自定義formslot調用rules自定義規(guī)則方式

    在Avue框架中,使用formslot自定義表格列時可能會遇到無法調用Avue的自定義校驗規(guī)則的問題,這通常發(fā)生在嘗試通過formslot自定義設置列的場景中,解決這一問題的一個有效方法是將自定義列與Avue的校驗規(guī)則通過特定方式連接起來
    2024-10-10
  • vue甘特圖vxe-gantt實現(xiàn)點擊任務條彈出編輯表單效果

    vue甘特圖vxe-gantt實現(xiàn)點擊任務條彈出編輯表單效果

    本文將介紹如何使用 vxe-gantt 組件實現(xiàn)點擊任務條彈出編輯表單的功能,支持對任務的名稱、時間、進度、負責人、圖片附件等信息進行編輯,感興趣的朋友跟隨小編一起看看吧
    2026-03-03
  • Vue3通用API功能示例剖析

    Vue3通用API功能示例剖析

    這篇文章主要為大家介紹了Vue3通用API功能示例剖析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-05-05

最新評論

沂南县| 隆尧县| 宁夏| 象州县| 大理市| 准格尔旗| 龙陵县| 禄劝| 花垣县| 天峨县| 大竹县| 盐池县| 广平县| 陵川县| 娱乐| 台南市| 津南区| 花莲县| 通海县| 灵宝市| 牡丹江市| 泰顺县| 收藏| 边坝县| 仲巴县| 高安市| 五峰| 富顺县| 多伦县| 广灵县| 长沙市| 栾城县| 通城县| 牙克石市| 雅江县| 苏尼特右旗| 邵东县| 吕梁市| 乐山市| 都安| 游戏|