位置: IT常识 - 正文

vue项目created()被调用多次的坑(vue created mounted)

编辑:rootadmin
vue项目created()被调用多次的坑 一、问题描述

推荐整理分享vue项目created()被调用多次的坑(vue created mounted),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:vue created this,vue create 项目,vue create 项目报错,vue created 操作dom,vue里的created,vue created 操作dom,vue里的created,vue里的created,内容如对您有帮助,希望把文章链接给更多的朋友!

最近碰到一个奇怪的生产问题: 正常情况下、前端页面会请求一次后台、然后后台返回信息("处理成功"或"处理失败")、前端展示; 后台用aop+redis写了一个防止重复调用的方法,如果5s内同一个用户重复调用同一个接口,就返回"请勿重复调用",前端就会展示这个。

但是,某几个页面,前端总是会重复调用后端2次,导致用户只能看到"请勿重复调用",无法确认本次操作是成功还是失败,严重影响了用户的正常使用。(虽然是处理成功,但是显示不出来…)

一开始还怀疑是不是后端的问题,排查了半天,终于锁定了,是前端的问题,vue项目中的created()方法被调用了2次。

继续排查,发现从正常页面跳转到这个问题页面时,确实只跳转了1次,按理说created()方法应该也只触发1次的,但是就是不知道为什么触发了2次。

二、排查过程

1.从头开始排查前端项目,vue项目首先会加载main.js,发现这个文件里有:

import Vcon from './assets/js/vcon'new Vcon({ env: ENV}, () => { new Vue({ router, render: h => h(App) }).$mount('#app')})

发现这个文件里,并不是普通的使用new Vue()创建的页面,而是外面有封装了一个new Vcon()方法,并传了2个参数,其中第一个参数是{ env: ENV },第二个参数是 () => { new Vue({ router, render: h => h(App) }).$mount('#app') }

2.继续,查看./assets/js/vcon.js文件,发现这个文件里有类似这样的:

class Vcon { constructor (opt, callBack) { this.env = opt.env || '' // 记录代码环境 this.callBack = callBack // 记录回调函数 // 如果是生产环境 if (this.env !== 'test') { this.prodInit() typeof this.callBack === 'function' && this.callBack() return } // 如果是测试环境 if (this.env === 'test') { this.testInit() return } } testInit () { import('vconsole').then(({ default: VConsole }) => { new VConsole() console.log('测试vconsole加载完成') typeof this.callBack === 'function' && this.callBack() }) } prodInit () { let _that = this window.ISALES.callApp('getUserInfoByNative', { callback: function (userInfo) { if (userInfo.code === '0') { _that.betterStaffNUmber = userInfo.msg.staffNumber _that.betterHandler(userInfo) return } alert('获取sdk出错,请稍后再试') } }) } betterHandler (userInfo) { if (userInfo.msg.userCode == 'admin') { import('vconsole').then(({ default: VConsole }) => { new VConsole() console.log(`admin的vconsole加载完成`) typeof this.callBack === 'function' && this.callBack() }) return }else{ this.callBack() } }}vue项目created()被调用多次的坑(vue created mounted)

其中,当上一步执行new Vcon()时,实际执行的就是这里的constructor ()方法; 如果是测试环境,那就执行testInit ()方法,这个还是比较明显的,用来展示vconsole(测试环境一直正常,没有复测出来问题); 如果是生产环境,那就执行prodInit()方法,然后执行typeof this.callBack === 'function' && this.callBack()方法(这里感觉有些问题,先继续看);

prodInit()方法里,会执行window.ISALES.callApp方法,这个是个sdk方法(这个前端项目是vue项目,可以打包后把静态页面部署在服务器上;sdk方法是app和ios里的方法,前端只能这样才能调用到、待sdk方法处理完后会触发callback方法);

sdk方法中,会执行betterHandler()方法,意思是,如果当前app/ios的登录人是admin,那就显示vconsole,否则就不显示。

3.根据生产created()方法被调用2次、而测试正常的现象,排查到问题方法位置:

// 如果是生产环境 if (this.env !== 'test') { this.prodInit() typeof this.callBack === 'function' && this.callBack() return }

因为prodInit()方法的逻辑中,正常情况下,已经调用过一次typeof this.callBack === 'function' && this.callBack()了,然而执行完prodInit()方法后,又会调用一次typeof this.callBack === 'function' && this.callBack(),所以才导致created()方法被重复调用了2次。

4.正确代码如下:

// 如果是生产环境 if (this.env !== 'test') { this.prodInit() //这里导致了重复created() //typeof this.callBack === 'function' && this.callBack() return }

修改后,发布生产,终于恢复了正常。

三、备注

1.vue项目中,有时会自动优化代码格式,导致if后面没有大括号、只有1句,满足条件就执行、不满足就不执行,需要注意。

2.有时,if没有else,而是if中结尾有个return,此时也类似else,但是容易忽略,需要注意。(这个也是自动优化格式的?还是故意写的难懂了?)

3.typeof this.callBack === 'function' && this.callBack(),这个的意思是,如果this.callBack是function类型的,那就会执行后面的this.callBack()方法,然后继续下一步;如果不是function类型的,那就不执行后面的方法,直接继续下一步。(又一个不好理解的高级写法,用if不好吗?)

4.正常情况下,vue页面的created()方法会在页面初始化的时候执行1次;但是如果代码有问题,就会导致created()方法会在页面初始化的时候执行2次或多次(如本文),这个坑需要注意。

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

上一篇:用vue实现打印页面的几种方法(vue如何实现打印)

下一篇:OpenAI创始人:GPT-4的研究起源和构建心法(openai创始人阿尔特曼 取向)

  • iphone双击背面截屏(iphone双击背面截屏原理)

    iphone双击背面截屏(iphone双击背面截屏原理)

  • 华为手机怎么设置屏幕锁(华为手机怎么设置返回键)

    华为手机怎么设置屏幕锁(华为手机怎么设置返回键)

  • wps只读文件怎么取消只读(wps只读文件怎么复制)

    wps只读文件怎么取消只读(wps只读文件怎么复制)

  • 微信怎么设置提示音(微信怎么设置提醒事项)

    微信怎么设置提示音(微信怎么设置提醒事项)

  • 笔记本1660ti和2060买哪个(笔记本1660ti和2060玩游戏对比)

    笔记本1660ti和2060买哪个(笔记本1660ti和2060玩游戏对比)

  • 华为信息删除怎么找回(华为信息删除怎么恢复不了)

    华为信息删除怎么找回(华为信息删除怎么恢复不了)

  • 华为p40pro功能介绍(华为p40pro有意思的功能)

    华为p40pro功能介绍(华为p40pro有意思的功能)

  • 手机没有深色模式怎么办(手机没有深色模式怎么开启微信深色模式)

    手机没有深色模式怎么办(手机没有深色模式怎么开启微信深色模式)

  • 抖音联系我们怎么设置(抖音联系我们怎么设置真实电话)

    抖音联系我们怎么设置(抖音联系我们怎么设置真实电话)

  • tpc是什么接口(tpc接口内部结构)

    tpc是什么接口(tpc接口内部结构)

  • 抖音截流是什么意思(抖音截流获客软件)

    抖音截流是什么意思(抖音截流获客软件)

  • 设定打印纸张大小时,应当使用的命令是(设定打印纸张大小时应当使用的命令是?)

    设定打印纸张大小时,应当使用的命令是(设定打印纸张大小时应当使用的命令是?)

  • airpods直接用iphone线充吗(airpods可以直接用苹果数据线充电吗)

    airpods直接用iphone线充吗(airpods可以直接用苹果数据线充电吗)

  • 钉钉大王卡免流吗(钉钉大王卡免流量吗)

    钉钉大王卡免流吗(钉钉大王卡免流量吗)

  • oppor15处理器是什么(oppor 15的处理器)

    oppor15处理器是什么(oppor 15的处理器)

  • oppoa37的呼吸灯怎么设置(oppo a32呼吸灯)

    oppoa37的呼吸灯怎么设置(oppo a32呼吸灯)

  • 宽带和wifi有什么区别(宽带和wife的区别)

    宽带和wifi有什么区别(宽带和wife的区别)

  • 微信多久能自动解冻(微信多开)

    微信多久能自动解冻(微信多开)

  • a1674是ipad几代(a1674是ipad几代几寸)

    a1674是ipad几代(a1674是ipad几代几寸)

  • 手机腾讯会员扫码在哪(手机腾讯会员扫码登录)

    手机腾讯会员扫码在哪(手机腾讯会员扫码登录)

  • airpods带麦吗(airpods1有麦克风吗)

    airpods带麦吗(airpods1有麦克风吗)

  • 淘宝怎么开直播(淘宝怎么开直播卖货收费吗)

    淘宝怎么开直播(淘宝怎么开直播卖货收费吗)

  • 如何关闭windows安全报警?具体操作步骤(如何关闭windows10自动更新)

    如何关闭windows安全报警?具体操作步骤(如何关闭windows10自动更新)

  • 6000元左右的主机该怎么配2018年2月(六千元左右)

    6000元左右的主机该怎么配2018年2月(六千元左右)

  • 激光SLAM框架总结(激光slam入门教程)

    激光SLAM框架总结(激光slam入门教程)

  • 小规模纳税人要做账吗
  • 交个税步骤
  • 补缴关税税率
  • 员工交通费可以税前扣除吗
  • 销售农产品是否可以抵税
  • 以库存现金付讫
  • 建筑企业增值税纳税义务发生时间如何确定
  • 因技术原因淘汰的财产形成的损失需备案吗
  • 多开的增值税发票交多少税
  • 变更注册资本的股东会决议范本
  • 营业收入管理也是企业财务管理的基本内容
  • 清算多交的增值税如何结转做分录?
  • 以公司股权作价入股母公司
  • 收取职工房租 算收入吗
  • 专票可以当费用票吗
  • 怎么查公司连续缴纳社保记录
  • 非居民企业从居民企业取得分红
  • 增值税更正申报表需要逐月更正吗
  • 应收账款手工核算方法
  • 组合销售带来的收益
  • 库存现金清查短款会计分录
  • 以公司名义投资好还是以个人名义投资好
  • 仓储费怎么账务处理
  • 以前年度应交税费调整
  • 关闭windows安全中心拦截
  • 单位银行结算账户属于活期存款账户
  • 员工工伤保险报销条件
  • php中使用什么关键字定义常量
  • 什么情况下计提信用减值损失
  • 出现巨石
  • 密歇根湖怎么读
  • 土地出让金抵减增值税账务处理
  • 增值税和所得税区别
  • 出售长期股权投资的交易费用
  • 京东到家的物流模式
  • 前端资源浏览器下载
  • php错误和异常
  • 小规模纳税人房产税优惠政策2023
  • iperf3命令和iperf2
  • 员工探亲证明怎么写
  • 采购国产设备退税公告
  • 进项大于销项怎么做分录
  • 个人所得税转账扣除子女教育那个什么时候可以提交
  • 税控系统维护费抵扣申报表怎么填
  • 融资租赁担保余值例题
  • 营改增后小规模都是三个点吗
  • 小规模纳税人免增值税的账务处理
  • 给天猫开的服务怎么关闭
  • 结转本年利润要算期初余额吗
  • 损益类科目全部科目
  • 逾期的押金收入
  • 没签劳动合同的后果
  • 幼儿园报税的基础是什么
  • 出租车票单张限额
  • win8.1无法连接无线网
  • ubuntu20.04升级21.04
  • mac电脑废纸篓清空文件恢复
  • assoc.exe
  • 微软推送Win11226x1.2050
  • VirtualBOX给CentOS建共享文件夹的方法
  • win7大小写提示图标
  • 微软发布Win10优化工具
  • ssh 使用代理
  • linux脚本作用
  • javascript语言介绍
  • Unity3D游戏开发引擎
  • js表单事件有哪些
  • javascript怎么弄
  • 用javascript
  • 安卓工程如何正常启动
  • javascript高级程序设计电子版
  • 用python模拟用户登录
  • 主机端口扫描程序设计python
  • 堆栈模式都是什么意思
  • Android之Broadcast与BroadcastReceiver
  • android 布局属性大全
  • python else用法
  • 绿化项目利润
  • 一季度土地市场
  • 小区配电房移交供电局的依据
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设