位置: 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 打包)

  • 淘宝SEO的三大策略(淘宝seo的三大策略是)

    淘宝SEO的三大策略(淘宝seo的三大策略是)

  • 红米buds3怎么连接(红米buds3怎么连苹果)

    红米buds3怎么连接(红米buds3怎么连苹果)

  • 抖音哪里看直播(抖音哪里看直播时间)

    抖音哪里看直播(抖音哪里看直播时间)

  • 6s屏幕分辨率怎么设置(iphone6plus屏幕分辨率)

    6s屏幕分辨率怎么设置(iphone6plus屏幕分辨率)

  • 小米cc9pro充电速度(小米cc9pro33w快充)

    小米cc9pro充电速度(小米cc9pro33w快充)

  • 无线网和移动数据同时打开,会不会要流量(无线网和移动数据冲突)

    无线网和移动数据同时打开,会不会要流量(无线网和移动数据冲突)

  • 电脑加了内存条和没加的区别(电脑加了内存条需要设置吗)

    电脑加了内存条和没加的区别(电脑加了内存条需要设置吗)

  • 苹果卡槽弹不出的原因(苹果卡槽弹出来拔不动)

    苹果卡槽弹不出的原因(苹果卡槽弹出来拔不动)

  • 座机电话打不出去是怎么回事(如何把座机电话转接到手机)

    座机电话打不出去是怎么回事(如何把座机电话转接到手机)

  • 快手小店添加商品备案编号是什么(快手小店添加商品口令是什么)

    快手小店添加商品备案编号是什么(快手小店添加商品口令是什么)

  • 淘宝拍单什么意思(淘宝拍单违法吗)

    淘宝拍单什么意思(淘宝拍单违法吗)

  • 抖音直播很卡是什么原因(抖音直播卡是网络原因还是手机)

    抖音直播很卡是什么原因(抖音直播卡是网络原因还是手机)

  • 趣分类实名认证可以注销吗(趣分类实名认证安全吗能解除吗)

    趣分类实名认证可以注销吗(趣分类实名认证安全吗能解除吗)

  • 苹果游戏充值退款后充值的道具还收回吗(苹果游戏充值退款绝对成功的理由)

    苹果游戏充值退款后充值的道具还收回吗(苹果游戏充值退款绝对成功的理由)

  • OPPO k5是什么材质(oppo k5手机怎么样 质量好么)

    OPPO k5是什么材质(oppo k5手机怎么样 质量好么)

  • 华为20i的返回键在哪(华为20i返回键在哪)

    华为20i的返回键在哪(华为20i返回键在哪)

  • 铃声多多怎么弄的本地(铃声多多怎么弄歌词到屏幕上)

    铃声多多怎么弄的本地(铃声多多怎么弄歌词到屏幕上)

  • 号码被标记怎么取消(号码被标记怎么去除)

    号码被标记怎么取消(号码被标记怎么去除)

  • xr几寸屏幕(xr几寸的屏)

    xr几寸屏幕(xr几寸的屏)

  • 小米6如何开启全面屏手势(小米6如何开启立体音效)

    小米6如何开启全面屏手势(小米6如何开启立体音效)

  • 苹果手机能刷机解id锁吗(苹果手机能刷机吗?刷机后还有那么好吗?)

    苹果手机能刷机解id锁吗(苹果手机能刷机吗?刷机后还有那么好吗?)

  • 微信如何进别人空间(怎样才能进别人微信)

    微信如何进别人空间(怎样才能进别人微信)

  • win10下载的软件怎么放到桌面(win10下载的软件打不开)

    win10下载的软件怎么放到桌面(win10下载的软件打不开)

  • 三、Echart图表 之 X轴(xAxis)与 Y轴(yAxis)配置项大全(echarts图表绘制步骤)

    三、Echart图表 之 X轴(xAxis)与 Y轴(yAxis)配置项大全(echarts图表绘制步骤)

  • 支付给法律顾问的钱
  • 金融类企业
  • 企业所得税零申报表怎么填写
  • 企业所得税包含哪些税种
  • 金税三期电子发票怎么领取
  • 端午节福利计入什么科目
  • 存货售出后是否含税
  • 核算无形资产的过程中,使用的会计账户有
  • 房地产开发企业土地增值税清算
  • 贴现是融资业务吗
  • 工会经费计提多了跨年
  • 公司注销后会计凭证保管年限
  • 进项税额抵减欠税后附加税可以抵减吗
  • 企业购买国债逆回购需要缴纳增值税吗
  • 暂扣员工工资怎么做账
  • 外购的自用小轿车
  • 个人与个人之间转账有限额吗
  • 营改增后不动产出租适用税率
  • 金蝶K3如何设置套打
  • 分包与转包的区别 法院
  • 工程项目的业务流程
  • 能够影响现金流的因素有
  • 固定资产验收单图片
  • 企业固定资产清单表格
  • 收入税金摘要怎么写
  • 个税上月没有申报当月可以补报么
  • 公司购买模具的会计科目
  • 什么是现金购房
  • 捐赠固定资产资产处置损益
  • 公司注销注销顺序
  • 购买一台电脑会计分录
  • php和数据库
  • 进程中svchost
  • vue-html
  • 车辆运输费计入什么科目
  • 登记会计账簿的作用
  • 政府补助资金使用范围及管理方法
  • 知名个人网站
  • 模型怎么部署
  • 处置固定资产涉税
  • 税务局规定500元以下收据的要求
  • 企业的日常活动都有哪些
  • 古腾堡中文官网
  • 账上没有实收资本
  • 支付给退休人员的退休费计入
  • 企业年金的功能代理人
  • 开票明细是食品类吗
  • 个人转租房需要注意什么
  • 小规模印花税有减免政策吗
  • 超过保质期放冰箱还能吃吗
  • 职工福利费无发放原因
  • 以前年度少计提的工资怎么处理
  • 房地产成本核算对象
  • 库存商品的出售
  • 企业收到的政府补助属于
  • 购入固定资产的增值税计入成本吗
  • 保险增值税发票是什么
  • 委托方和受委托方的法律关系
  • mysql主界面
  • 老生常谈啥意思
  • MySQL-group-replication 配置步骤(推荐)
  • winxp更新到win10
  • mac os ftp
  • 自动启动win10
  • win10系统找不到mrt
  • 快捷图标小箭头怎么恢复
  • win8右侧栏设置
  • window打开
  • zmweb.exe是什么进程
  • excel表格时间选择
  • Shell脚本监控linux系统信息
  • windows2008 iis
  • jquery示例
  • python 效率优化
  • [置顶]马粥街残酷史
  • javascript操作数组的方法
  • JavaScript中的数据类型分哪为两大类?
  • js如何实现复制
  • 网上交医保几点上班
  • 地税怎么查个人所得税
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设