位置: 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创始人阿尔特曼 取向)

  •  注册资金100万实缴多少

    注册资金100万实缴多少

  • python排序函数(python排序函数有哪些)

    python排序函数(python排序函数有哪些)

  • 团圆家乡年圆(团圆家乡年活动)(团圆家乡年什么意思)

    团圆家乡年圆(团圆家乡年活动)(团圆家乡年什么意思)

  • 华为matepad不支持耳机吗(华为matepad不支持语音唤醒)

    华为matepad不支持耳机吗(华为matepad不支持语音唤醒)

  • 知道抖音号却搜索不出来(知道抖音号却搜索不到对方)

    知道抖音号却搜索不出来(知道抖音号却搜索不到对方)

  • 在excel中一个完整的函数包括(excel中一个完整的函数包括什么?)

    在excel中一个完整的函数包括(excel中一个完整的函数包括什么?)

  • word的字体对话框在哪(word的字体对话框可以完成哪些设置)

    word的字体对话框在哪(word的字体对话框可以完成哪些设置)

  • 启动hadoop的命令行(hadoop启动成功界面)

    启动hadoop的命令行(hadoop启动成功界面)

  • 计算机网络使用范围划分为(计算机网络使用的技术有哪两种)

    计算机网络使用范围划分为(计算机网络使用的技术有哪两种)

  • 抖音不实名认证能直播吗(抖音不实名认证可以赚钱吗)

    抖音不实名认证能直播吗(抖音不实名认证可以赚钱吗)

  • 微信聊天记录可以隐藏的吗(微信聊天记录可以恢复多久以前的)

    微信聊天记录可以隐藏的吗(微信聊天记录可以恢复多久以前的)

  • 微信吃西瓜表情代表什么(微信吃西瓜表情在哪)

    微信吃西瓜表情代表什么(微信吃西瓜表情在哪)

  • 抖音音乐版权限制分享怎么解决(抖音音乐版权限制怎么解决)

    抖音音乐版权限制分享怎么解决(抖音音乐版权限制怎么解决)

  • 淘宝id地址是什么意思(淘宝id是哪里)

    淘宝id地址是什么意思(淘宝id是哪里)

  • word2007页脚页码设置(word2007页眉页脚怎么设置)

    word2007页脚页码设置(word2007页眉页脚怎么设置)

  • 手机为什么应用无法正常启动(手机为什么应用打不开)

    手机为什么应用无法正常启动(手机为什么应用打不开)

  • 京东退货钱会退回微信吗(京东退货钱会退回微信需要多久)

    京东退货钱会退回微信吗(京东退货钱会退回微信需要多久)

  • 端游是什么(刀塔端游是什么)

    端游是什么(刀塔端游是什么)

  • 苹果x前置呼吸灯会亮吗(苹果x前置呼吸灯不亮)

    苹果x前置呼吸灯会亮吗(苹果x前置呼吸灯不亮)

  • 突然苹果手机抖音不能用(苹果突然抖动)

    突然苹果手机抖音不能用(苹果突然抖动)

  • pr怎么让声音慢慢减弱(pr怎么让声音慢慢淡出)

    pr怎么让声音慢慢减弱(pr怎么让声音慢慢淡出)

  • 华为荣耀20的返回键在哪里(华为荣耀20的返回键在哪)

    华为荣耀20的返回键在哪里(华为荣耀20的返回键在哪)

  • 美拍如何上传本地音乐(美拍如何上传本地文件)

    美拍如何上传本地音乐(美拍如何上传本地文件)

  • 电脑微信显示磁盘已满(电脑微信显示磁盘)

    电脑微信显示磁盘已满(电脑微信显示磁盘)

  • ps保存快捷键(ps保存快捷键没反应)

    ps保存快捷键(ps保存快捷键没反应)

  • 大白菜U盘启动盘制作工具怎么安装win10系统 大白菜u盘安装win10系统图文教程(大白菜u盘启动后黑屏)

    大白菜U盘启动盘制作工具怎么安装win10系统 大白菜u盘安装win10系统图文教程(大白菜u盘启动后黑屏)

  • 论文学习——Tune-A-Video(论文如何学)

    论文学习——Tune-A-Video(论文如何学)

  • 非居民企业享受协定待遇
  • 增值税电子普票没有电子章有效吗
  • 职工福利费会计凭证
  • 会计所得税公式怎么算
  • 坏账准备转回的条件
  • 销售使用过的固定资产放弃减税
  • 发票作废了清单一样怎么重新使用
  • 个税申报数据有误,如何快速更正
  • 存货占营业收入的意义
  • 收据可以盖发票专用章吗有效吗
  • 什么情况下征税
  • 债务重组的会计准则
  • 公司清算后资产负债表与利润表
  • 接受虚开增值税 经侦立案
  • 存在问题的具体表现和产生问题的原因分析
  • 增值税专用发票电子版
  • 迟延履行利息记什么科目?
  • 工程投标保证金最新规定
  • 国家税务局通用定额发票查询
  • 收到差额纳税的发票进项税能抵扣吗
  • 工程款发票备注栏项目名称
  • 税务变更
  • 贷款本金余额具体是什么意思
  • 新准则 预提费用
  • 税务机关核定的计税价格是否含税
  • 土地城镇化怎么计算
  • 废旧物资收购发票
  • 建筑公司工地买空调
  • 无经营零申报公司注销要交印花税吗
  • 无效发票不能报销怎么办
  • 网络不通怎么办苹果手机
  • 研发费用加计扣除是什么意思啊
  • Netlib.exe - Netlib是什么进程 有什么用
  • 世界十大销量书
  • 银行卡透支怎么还
  • 车辆保养费可以计入交通费吗
  • 用谷歌浏览
  • vant ui
  • 质量事故发生后,有责任就所发生的质量事故
  • 汽车上牌照的费用计入什么会计科目
  • 个人所得税专项附加扣除标准一览表
  • 福利费工会经费教育经费计提比例
  • 预提的管理费用,汇算清缴怎么做
  • 赔偿给客户的产品交增值税吗
  • 对公账户给别人走账
  • 车辆抵押贷款怎么办理
  • 收到加油
  • 住宅可以注册什么类型的公司
  • 企业计提坏账准备遵循的会计信息质量要求是
  • 财税公司工作内容
  • 发票金额小于实付金额会计分录
  • 可抵扣的税票
  • 电子产品多少金额要交税
  • 简单的辞职报告
  • iis6设置
  • windows任务管理器命令
  • iis如何重新配置
  • Linux系统忘记root密码
  • freebsd 安装
  • wncloud.exe是什么程序
  • 注册表.bak
  • Ubuntu keylin 14.04 怎么使用root用户登录?
  • ubuntu16.04远程连接
  • linux的安装流程和详细内容
  • mac如何打印文件
  • win7一直配置
  • win7电脑耳机插上还是外放
  • javascript的理解
  • 如何删除命令
  • jquery根据class
  • unity操作教程
  • unity2019图集
  • javascript程序设计教程
  • listview subitems
  • android退出功能
  • 五十八二
  • 兖州宁德新能源官网首页
  • 河南省地方税务局公告2017年第4号
  • 广东政务平台网上办事大厅
  • 福建电子税务局社保缴费操作
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设