位置: IT常识 - 正文

vue中父组件异步数据通过props方式传递给子组件,子组件接收不到的问题(vue父组件引入子组件)

编辑:rootadmin
vue中父组件异步数据通过props方式传递给子组件,子组件接收不到的问题 vue中父组件异步数据通过props方式传递给子组件,子组件接收不到的问题

推荐整理分享vue中父组件异步数据通过props方式传递给子组件,子组件接收不到的问题(vue父组件引入子组件),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:vue父组件异步传值如何处理,vue父组件异步传值如何处理,vue父组件引入子组件,vue中父组件怎么调用子组件的方法,vue父组件异步获取数据传给子组件,vue父组件异步传值如何处理,vue父组件异步传值如何处理,vue父组件异步获取数据传给子组件,内容如对您有帮助,希望把文章链接给更多的朋友!

问题描述 组件化开发中经常用到父子组件的通信,父传子子传父等数据的操作,如果父组件的数据是发请求从后端获取的异步数据,那么父组件将这个数据传递给子组件的时候,因为是异步数据,就会出现父组件传递过去了,但是子组件mounted钩子初始情况下是接收不到的问题。本篇文章记录了一下这个问题的解决方案。

在说这个问题之前,我们先来回顾一下父子组件的生命周期

父子组件生命周期执行顺序

加载渲染数据过程父组件

beforeCreate --> 父组件 created --> 父组件 beforeMount --> 子组件 beforeCreate --> 子组件 created --> 子组件 beforeMount --> 子组件 mounted --> 父组件 mounted -->

更新渲染数据过程

父组件 beforeUpdate --> 子组件 beforeUpdate --> 子组件 updated --> 父组件 updated -->

销毁组件数据过程

父组件 beforeDestroy --> 子组件 beforeDestroy --> 子组件 destroyed --> 父组件 destroyed

可以这样理解,父组件生命周期中会先看看子组件的生命周期有没有走完,子组件生命周期走完了,才会走父组件的生命周期。

问题分析 我们模拟一下父子组件通信的过程,写个小demo。看看在子组件中的mounted钩子中能不能接收到父组件传递过来的数据

vue中父组件异步数据通过props方式传递给子组件,子组件接收不到的问题(vue父组件引入子组件)

父组件代码

<template> <div id="app"> <child :msg="msg"></child> </div></template><script>import child from "./views/child";export default { name: "App", components: { child, }, data() { return { msg: "", // 我们要把父组件从接口获取的数据存到data中的msg里面,然后再传递给子组件 }; }, created() { // 用定时器模拟发请求异步获取后端接口的数据 setTimeout(() => { this.msg = "666"; }, 200); },};</script>

子组件代码

<template> <div> <h2>{{msg}}</h2> </div></template><script>export default { props:{ msg:{ type:String, default:'' } }, mounted() { console.log('mounted钩子中接收',this.msg); },}</script>

最终在mounted钩子中会实现,我们会发现打印不出来,如下图

当然如果是同步的数据传递给子组件,子组件的mounted钩子是能接收到,能打印出来的,这里就不演示了,因为我们做项目开发的数据大多数都输从后端的接口中获取的异步数据的。

因为父组件传递给子组件的数据,可能我们还要加工一下再使用,所以在mounted钩子中获取父组件传递过来的数据是一定要做的。那么,这里为什么mounted钩子中打印不出来父组件传递过来的数据,但是props最终接收到了,页面最终还渲染出来了么?

原因浅析

我们知道,mounted钩子默认加载只会执行一次,由于数据是要等到200毫秒以后才能拿到,那么子组件的mounted钩子执行的时候,还没有拿到父组件传递过来的数据,但是又必须要打印出来this.msg的结果,那这样的话,就只能去打印props中的msg的默认值空字符串了,所以打印的结果是一个空字符串,比如,我们在子组件中这样打印就知道this.msg是不是空字符串了

mounted() { console.log('mounted钩子中接收', this.msg == ''); },

打印结果图如下 但是props是可以等的,是可以拿到异步的数据渲染的。所以就出现了上述的结果,有问题解决问题,接下来说一下解决这样的问题的方案

方案一 使用v-if控制子组件渲染的时机

思路其实很简单,就是初始还没拿到后端接口的异步数据的时候,不让组件渲染,等拿到的时候再去渲染组件。使用v-if="变量"去控制,初始让这个变量为false,这样的话,子组件就不会去渲染,等拿到数据的时候,再让这个变量变成true,这样的话,组件就会去渲染,此时数据也已经得到了,这样的话,在子组件的mounted钩子中就拿到父组件传过来的异步数据了。代码如下

父组件

<template> <div id="app"> <child :msg="msg" v-if="isGetData"></child> </div></template><script>import child from "./views/child";export default { name: "App", components: { child, }, data() { return { msg: "", isGetData:false // 初始为false,就不会被渲染对应的子组件 }; }, created() { // 用定时器模拟发请求异步获取后端接口的数据 setTimeout(() => { this.msg = "666"; this.isGetData = true // 拿到数据以后,再把isGetData置为true,这样的话,组件就会被渲染啦,数据也就会被传递过去啦 }, 200); },};</script>

子组件 这种方式,子组件不用动代码,在父组件中去做控制即可

但是这种方式有一个小小的缺点,就是最终效果会显得组件有些延迟才出现效果。因为异步数据是从后端的接口获取的,如果接口时间长一些的话,最终效果渲染也会慢一点,但是!!!一般情况下,后端的接口速度都会控制在几十到几百毫秒的时间,一般情况下,不会出现好几秒,甚至几十秒的接口,所以瑕不掩瑜,这种方式不影响我们使用

方案二 子组件使用watch监听父组件传递过来的数据

父组件 这种方式父组件正常传递数据即可,不需要做什么代码处理,只要在子组件中加一个监听即可

子组件

<template> <div> <h2>{{ editMsg }}</h2> </div></template><script>export default { props: { msg: { type: String, default: "", }, }, watch: { // 监听到父组件传递过来的数据后,加工一下, // 存到data中去,然后在页面上使用 msg(newnew, oldold) { console.log("监听", newnew, oldold); this.editMsg = "---" + newnew + "---"; }, }, data() { return { editMsg: "", }; },};</script>

看一下这种方式对应的效果图

本文链接地址:https://www.jiuchutong.com/zhishi/284116.html 转载请保留说明!

上一篇:鸟瞰视角下的彩色船只,土耳其欧鲁旦尼斯 (© den-belitsky/Getty Images)(鸟瞰视野)

下一篇:关于Vite打包项目后图片丢失的解决方法(vnisedit 打包)

  • 企业微信营销推广的技巧(企业微信营销推广文案)

    企业微信营销推广的技巧(企业微信营销推广文案)

  • qq退出登录后聊天记录还有吗(qq退出后再登录聊天记录找不到了)

    qq退出登录后聊天记录还有吗(qq退出后再登录聊天记录找不到了)

  • 自动播放ppt怎么设置关闭(自动播放PPT怎么取消)

    自动播放ppt怎么设置关闭(自动播放PPT怎么取消)

  • 抖音关注请求怎么看不到(抖音关注请求怎么设置拒收)

    抖音关注请求怎么看不到(抖音关注请求怎么设置拒收)

  • 快手没有浏览设置怎么办(快手为什么没有浏览记录)

    快手没有浏览设置怎么办(快手为什么没有浏览记录)

  • 手机怎么查历史足迹(手机怎么查历史火车票记录)

    手机怎么查历史足迹(手机怎么查历史火车票记录)

  • wifi已连接dns未响应(无线连接dns未响应)

    wifi已连接dns未响应(无线连接dns未响应)

  • wps查找重复内容怎么弄(wps查找重复的怎么查找)

    wps查找重复内容怎么弄(wps查找重复的怎么查找)

  • 苹果11视频有回音是什么原因啊(苹果11视频有回音什么原因)

    苹果11视频有回音是什么原因啊(苹果11视频有回音什么原因)

  • 三星手机微信安装失败(三星手机微信安全锁怎么设置)

    三星手机微信安装失败(三星手机微信安全锁怎么设置)

  • 抖音小店提现收多少手续费(抖音小店收入提现)

    抖音小店提现收多少手续费(抖音小店收入提现)

  • g1840是几代(g1840哪一年出的)

    g1840是几代(g1840哪一年出的)

  • 无线网路由器光信号亮红灯怎么回事(无线路由器光信号闪烁怎么回事)

    无线网路由器光信号亮红灯怎么回事(无线路由器光信号闪烁怎么回事)

  • 为什么电脑指纹突然不能用了(为什么电脑指纹设置不了)

    为什么电脑指纹突然不能用了(为什么电脑指纹设置不了)

  • 天猫魔盒卡顿怎么办(天猫魔盒有点卡了怎么办)

    天猫魔盒卡顿怎么办(天猫魔盒有点卡了怎么办)

  • 抖音视频里的二维码怎么扫(抖音视频里的二维码)

    抖音视频里的二维码怎么扫(抖音视频里的二维码)

  • 在word里如何裁剪图片(word中图片裁剪)

    在word里如何裁剪图片(word中图片裁剪)

  • 怎么用百度网盘下载视频(怎么用百度网盘搜索资源)

    怎么用百度网盘下载视频(怎么用百度网盘搜索资源)

  • 微信共享定位怎样改(微信共享定位怎么修改位置)

    微信共享定位怎样改(微信共享定位怎么修改位置)

  • 数据字典存放了哪些信息(数据字典存放了多久)

    数据字典存放了哪些信息(数据字典存放了多久)

  • 苹果8pdock栏设置透明(iphone8dock栏)

    苹果8pdock栏设置透明(iphone8dock栏)

  • 拼多多消费记录在哪里(拼多多消费记录导出)

    拼多多消费记录在哪里(拼多多消费记录导出)

  • 苹果8拨号音无法取消吗(苹果手机拨号无声音)

    苹果8拨号音无法取消吗(苹果手机拨号无声音)

  • 为什么微信发送时间不对(为什么微信发送视频很慢)

    为什么微信发送时间不对(为什么微信发送视频很慢)

  • C盘垃圾太多?系统盘瘦身帮你解决(c盘垃圾太多需要重装系统嘛)

    C盘垃圾太多?系统盘瘦身帮你解决(c盘垃圾太多需要重装系统嘛)

  • 织梦CMS升级后出现 ?/a>或?/h3>导致网页错乱的解决方法(织梦cms要钱吗)

    织梦CMS升级后出现 ?/a>或?/h3>导致网页错乱的解决方法(织梦cms要钱吗)

  • 北京外贸进出口公司
  • 投资性房地产公允价值变动
  • 跨区域涉税事项报验是什么意思
  • 增值税留抵税额计入什么科目
  • 企业所得税如何申报操作
  • 现金流量表季度报表本期金额
  • 项目差旅费能计入项目费用吗
  • 应交税费是没有增值税吗
  • 企业所得税可以抵扣吗
  • 运输业务增值税
  • 企业安全生产费用提取标准 最新
  • 技术服务费属于现代服务吗
  • 非居民企业所得税
  • 单位租用个人住房合法吗
  • 劳服企业可以安差额税上税吗?
  • 或有负债记入哪个科目?
  • 三证合一号码是纳税人识别号吗
  • 个人非货币性资产投资的税务筹划
  • 资产改变用途的法律规定
  • 企业购进货物被没收 进项税额能否抵扣?
  • 填写a201030减免所得税优惠明细怎么填
  • 每月收到融资租赁费利息发票
  • 印花税资金账簿减免税优惠政策2021
  • 税务贷的用途
  • 销售退货怎么开红字
  • 车船使用牌照税收多少
  • 计提生产设备折旧费计入什么科目
  • 沙盘模型制作费用
  • arm on windows
  • desktop病毒
  • 超市代金券买什么最划算
  • 提取的坏账准备怎么算
  • 工业厂房修建需要哪些手续
  • 自营 代理
  • 发行的企业债券是什么会计科目
  • 用银行存款支付前欠货款
  • es6的module模块
  • 如何免费使用超级简历
  • yii框架怎么样
  • 进货成本价是什么
  • 无票收入怎么计算1%税率
  • vue修改父组件的值
  • 其他综合收益转入盈余公积和未分配利润
  • 车间打杂工
  • 可供出售金融资产的会计处理
  • 增值税小规模纳税人
  • 运输发票必须附票吗
  • mockito mock方法
  • 织梦系统网站搭建教程
  • SQL Server FileStream详解
  • 第一次购买金税盘会计分录
  • 自行建造的固定资产达到预定可使用状态
  • 对外支付代扣代缴税费
  • 年末结转步骤
  • 递延负债和递延收益
  • 当月计提的工资,次月申报吗
  • 基建账是否为可不并入大账
  • 印花税城建税教育费附加等其他税种的纳税申报
  • 无形资产如何摊销公式
  • 资产负债表中的货币资金怎么算
  • 开建筑工程公司赚钱吗
  • 公对公房产过户
  • 预提费用如何做账务处理
  • 企业实缴资本如何查
  • 会计账本是一年一本吗
  • windows电脑设置
  • Windows XP用户账户控制
  • linux下nanosleep() & sleep()的区别
  • office2013标准版
  • macos的磁盘
  • win8系统远程桌面在哪里
  • win10 u盘写保护
  • Vsftpd+tcp_wrappers控制主机和用户访问
  • windows7输入
  • css表格设置边框
  • service与activity数据交互
  • 安卓全局替换
  • 出口退税退运需要什么
  • 农机作业服务费用 如何开发票
  • 购买烟叶要交烟税吗
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设