vue3父子組件傳值;vue3子組件傳值給父組件;vue3子組件監聽父組件接口傳值;父子組件事件調用

代碼在文末,均可直接復制使用

本文主要描述,父子組件傳值、調用等問題

文章目錄

    • 問題1:子組件接收不到父組件傳值
    • 問題2:子組件接受的值,修改后,發現父組件值也改變了
    • 問題3:子組件接受值,修改后頁面不更新
    • 問題4:子傳父事件,父組件接受值,賦值無效
    • 5、子傳父
    • 6、父調用子
    • 7、代碼


問題1:子組件接收不到父組件傳值

如果父組件的值,在onMounted時候賦值,或者是接口等異步賦值,那子組件直接拿不到修改的值。子組件需要使用watch監聽
搜索子組件son.vue的watch查看

問題2:子組件接受的值,修改后,發現父組件值也改變了

如果不想改變,需要在子組件接受時候,進行深拷貝賦值。建議都是以深拷貝,如果想改父組件的值,就單獨子傳父事件修改

問題3:子組件接受值,修改后頁面不更新

在子組件接受簡單數據類型時候,改成ref接受,生成響應式數據
具體查看: let num1VALUE = ref(props.num1) // 生成響應式數據 否則修改數據 頁面不變化

問題4:子傳父事件,父組件接受值,賦值無效

這是因為你父組件的那個變量,是使用reactive聲明的。reactive 不要直接變量data=賦值!!!會丟失響應式的。如果用ref就不會 非要賦值要不就使用單個屬性一個個賦值 obj.屬性 = 屬性值 、要不就給原對象多包裹一層對象
由此可見:聲明盡量用ref。。。。

5、子傳父

搜索 update:obj 查看。

6、父調用子

搜索sonRef.value.childMethod()查看

7、代碼

父組件far.vue

<template><div><div>父:{{ state.str1 }}--{{ state.data1 }}--{{ obj1 }} -- {{ num1 }}</div><button style="border: 1px solid cyan;" @click="callChildMethod">父調子事件</button><hr><son ref="sonRef" :str1="state.str1" :data1="state.data1" :obj1="obj1" :num1="num1" @update:obj="getObj" /></div>
</template><script>
import { defineComponent, onMounted, reactive ,toRefs,ref} from 'vue'
import Son from './son.vue'export default defineComponent({components: {Son},setup() {const state = reactive({str1: '',data1: {}})let obj1 = reactive({a:1,})let num1 = ref(1)// 父接受子function getObj(val){obj1.a = val.a // reactive 不要直接data=賦值!!!會丟失響應式的,如果用ref就不會 非要賦值要不就使用 obj.屬性 = 屬性值 要不就給原對象多包裹一層對象// obj1 = val// obj1 = reactive({...val})console.log('父接受子',val,obj1);}// 父調用子事件const sonRef = ref(null)function callChildMethod() {sonRef.value.childMethod()}onMounted(() => {// 對于在onMounted或異步的數據 傳遞給子組件 子組件應該使用watch監聽接受 否則拿不到數據setTimeout(() => {state.str1 = '二次賦值!'state.data1 = {name: 'Alice',age: 25}}, 1000);})return {state,obj1,num1,sonRef,getObj,callChildMethod}}
})
</script>

子組件son.vue

<template><div><div>子:{{ state.str1VALUE }}--{{ state.data1VALUE }}--{{ obj1VALUE }} -- {{ num1VALUE }}</div><button style="border: 1px solid cyan;" @click="setVal">按鈕該值</button><button style="border: 1px solid cyan;" @click="setFarVal">子傳父</button></div>
</template><script>
import { defineComponent, reactive, watch,toRefs,toRef,ref } from 'vue'export default defineComponent({props: {str1: String,data1: Object,obj1: Object,num1: Number,},emits: ['update:obj'],setup(props, { emit }) {const state = reactive({str1VALUE: '',data1VALUE: {}})let obj1VALUE = JSON.parse(JSON.stringify(props.obj1)) // 復雜數據類型obj如果不用深拷貝賦值 修改對象obj.name單一屬性時候(state.data1VALUE.age = 33) 會導致父組件的源值改變 也會導致監聽事件再次執行let num1VALUE = ref(props.num1) // 生成響應式數據 否則修改數據 頁面不變化// 同時監聽str1和data1   對于在onMounted或異步的數據 傳遞給子組件 子組件應該使用watch監聽接受 否則拿不到數據watch([() => props.str1, () => props.data1], ([str1, data1]) => {console.log('監聽',str1,data1);state.str1VALUE = JSON.parse(JSON.stringify(str1)) // 復雜數據類型obj如果不用深拷貝賦值 修改對象obj.name單一屬性時候(state.data1VALUE.age = 33) 會導致父組件的源值改變 也會導致監聽事件再次執行state.data1VALUE = JSON.parse(JSON.stringify(data1))}, { deep:true })// setTimeout(() => {//   state.str1VALUE = 'str1'// }, 2000);function setVal(){state.str1VALUE = '三次修改賦值'// state.data1VALUE = {//   name: '張三',//   age: 11// }state.data1VALUE.age = 33obj1VALUE.a = 3num1VALUE.value = 3}// 子傳父function setFarVal(){let obj = {a: 123456}emit('update:obj', obj);console.log('子傳父',obj);}function childMethod(){console.log('子事件');}return {state,obj1VALUE,num1VALUE,setVal,setFarVal,childMethod}}
})
</script>

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

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

相關文章

07-HDFS入門及shell命令

1 文件系統 是一種存儲和組織數據的方法&#xff0c;它使得文件訪問和查詢變得容易使得文件和樹形目錄的抽象邏輯概念代替了磁盤等物理設備使用數據塊的概念&#xff0c;用戶使用文件系統來保存數據不必關心數據底層存在硬盤哪里&#xff0c;只需記住這個文件的所屬目錄和文件…

STM32基于CubeIDE和HAL庫 基礎入門學習筆記:物聯網項目開發流程和思路

文章目錄&#xff1a; 第一部分&#xff1a;項目開始前的計劃與準備 1.項目策劃和開發規范 1.1 項目要求文檔 1.2 技術實現文檔 1.3 開發規范 2.創建項目工程與日志 第二部分&#xff1a;調通硬件電路與驅動程序 第三部分&#xff1a;編寫最基礎的應用程序 第四部分&…

opencv帶GStreamer之Windows編譯

目錄 1、下載GStreamer和安裝2. GSTReamer CMake配置3. 驗證是否配置成功 1、下載GStreamer和安裝 下載地址如下&#xff1a; gstreamer-1.0-msvc-x86_64-1.18.2.msi gstreamer-1.0-devel-msvc-x86_64-1.18.2.msi 安裝目錄無要求&#xff0c;主要是安裝完設置環境變量 xxx\1…

【css】漸變

漸變是設置一種顏色或者多種顏色之間的過度變化。 兩種漸變類型&#xff1a; 線性漸變&#xff08;向下/向上/向左/向右/對角線&#xff09; 徑向漸變&#xff08;由其中心定義&#xff09; 1、線性漸變 語法&#xff1a;background-image: linear-gradient(direction, co…

一圖搞懂二層交換機、三層交換機和路由器的區別

二層交換機、三層交換機、路由器的區別 二層交換機、三層交換機、路由器對比二層交換機三層交換機路由器工作在第幾層數據鏈路層&#xff08;第二層&#xff09;網絡層&#xff08;第三層&#xff09;網絡層&#xff08;第三層&#xff09;功能學習和轉發幀根據IP地址轉發數據…

數據鏈路層是什么?

數據鏈路層承接上層的數據&#xff0c;然后使用下層提供的信道&#xff0c;按照一定的規則&#xff0c;進行數據傳輸。 物理層提供了傳輸媒體與連接&#xff08;信道&#xff09;&#xff08;數據鏈路層使用的信道通常是物理層提供的信道&#xff09;&#xff0c;即提供了比特…

webpack自動注冊全局組件

例如&#xff0c;在form文件夾下有許多流程類表單&#xff0c;一個一個注冊引入非常浪費時間&#xff0c;可使用webpack的require.context方法來自動導入 import { firstToUpper } from /utils/methodsconst taskTable {install: vue > {const req require.context(../fo…

springboot結合element-ui實現增刪改查,附前端完整代碼

實現功能 前端完整代碼 后端接口 登錄&#xff0c;注冊&#xff0c;查詢所有用戶&#xff0c;根據用戶名模糊查詢&#xff0c;添加用戶&#xff0c;更新用戶&#xff0c;刪除用戶 前端 注冊&#xff0c;登錄&#xff0c;退出&#xff0c;用戶增刪改查&#xff0c;導航欄&#…

Android Sutdio 導入libs文件夾下的jar包沒反應

有點離譜&#xff0c;笨笨的腦子才犯的錯誤 首先發現問題&#xff1a;轉移項目的時候 直接復制粘貼libs文件夾下的jar包到新項目&#xff0c;在build.gradle文件下 使用語句并應用也沒反應&#xff08;jar包沒有出現箭頭且代碼報錯&#xff0c;找不到&#xff09; implementa…

什么樣的 PLC 可以算是高端 PLC?

針對問題本身&#xff0c;有的回答里都提到了。可靠性&#xff0c;掃描時間&#xff0c;帶離散量點數&#xff0c;帶模擬量輸出點數&#xff0c;擴展性&#xff0c;這些都可以看作PLC系統級別劃分的依據。比如說&#xff0c;有相應安全完整性等級認證的LOGIC SOLVER為核心的PLC…

SpringBoot復習:(37)自定義ErrorController

所有接口統一返回的數據格式 package cn.edu.tju.domain;public class MyResponse {private int code;private String message;private String exception;private String stack;public int getCode() {return code;}public void setCode(int code) {this.code code;}public S…

五個獨特且有趣的ChatGPT指令

今天分享5個很實用的指令&#xff0c;這幾個指令很多時候對我們輸出內容的連貫性、文章風格、創意性等方面有著決定性的作用。 目錄 第一個&#xff1a;Max tokens&#xff08;最大令牌&#xff09; 第二個&#xff1a;Top_p(控制采樣) 第三個&#xff1a;Presence_penalty …

Android Studio System.out.println()中文亂碼

第一步&#xff1a; 打開studio64.exe.vmoptions加入-Dfile.encodingUTF-8 第二步&#xff1a; File-Settings-Editor-File Encodings 把所有的編碼格式改為UTF-8 嘗試跑一下代碼&#xff0c;如果還不行&#xff0c;重啟IDE 再試試。

UI美工設計崗位的工作職責

UI美工設計崗位的工作職責1 職責&#xff1a; 1、負責軟件界面的美術設計、創意工作和制作工作; 2、根據各種相關軟件的用戶群&#xff0c;提出構思新穎、有高度吸引力的創意設計; 3、對頁面進行優化&#xff0c;使用戶操作更趨于人性化; 4、維護現有的應用產品; 5、收集和…

NLP文本匹配任務Text Matching [無監督訓練]:SimCSE、ESimCSE、DiffCSE 項目實踐

NLP文本匹配任務Text Matching [無監督訓練]&#xff1a;SimCSE、ESimCSE、DiffCSE 項目實踐 文本匹配多用于計算兩個文本之間的相似度&#xff0c;該示例會基于 ESimCSE 實現一個無監督的文本匹配模型的訓練流程。文本匹配多用于計算兩段「自然文本」之間的「相似度」。 例如…

一百五十三、Kettle——Linux上安裝的kettle9.3啟動后說缺少libwebkitgtk-1.0(真是坑爹啊,剛龜速下載又忍痛卸載)

一、問題 在kettle9.3可以在本地連接hive312后&#xff0c;在Linux中安裝了kettle9.3&#xff0c;結果啟動時報錯WARNING: no libwebkitgtk-1.0 detected, some features will be unavailable 而且如果直接下載libwebkitgtk的話也沒有用 [roothurys22 data-integration]# yu…

Python學習筆記第五十六(Pandas JSON)

Python學習筆記第五十六天 Pandas JSONread_json()to_string()字典轉為 DataFrame 數據 內嵌的 JSON 數據json_normalize() 后記 Pandas JSON JSON&#xff08;JavaScript Object Notation&#xff0c;JavaScript 對象表示法&#xff09;&#xff0c;是存儲和交換文本信息的語…

在線吉他調音

先看效果&#xff08;圖片沒有聲&#xff0c;可以下載源碼看看&#xff0c;比這更好~&#xff09;&#xff1a; 再看代碼&#xff08;查看更多&#xff09;&#xff1a; <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8&quo…

【第二階段】kotlin的函數類型作為返回類型

fun main() {//調用,返回的是一個匿名類型&#xff0c;所以info就是一個匿名函數val infoshow("",0)//info接受的返回值為匿名類型&#xff0c;此時info就是一個匿名函數println(info("kotlin",20)) }//返回類型為一個匿名函數的返回類型fun show(name:Str…

01 - 工作區、暫存區、版本庫、遠程倉庫 - 以一次連貫的提交操作為例

查看所有文章鏈接&#xff1a;&#xff08;更新中&#xff09;GIT常用場景- 目錄 文章目錄 1. 工作區、暫存區、版本庫、遠程倉庫1.1 工作區1.2 工作區 > 暫存區&#xff1a;git add1.3 暫存區 > 版本庫&#xff1a;git commit1.4 push到遠程倉庫 1. 工作區、暫存區、版本…