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

  • 淘宝退货怎么把一整单一起退(淘宝退货怎么把上门取件改成自己寄件)

    淘宝退货怎么把一整单一起退(淘宝退货怎么把上门取件改成自己寄件)

  • 手机抬起唤醒耗电吗(手机抬起唤醒什么意思)

    手机抬起唤醒耗电吗(手机抬起唤醒什么意思)

  • 微信朋友圈动态设置了部分人可看如何取消(微信朋友圈动态图怎么弄)

    微信朋友圈动态设置了部分人可看如何取消(微信朋友圈动态图怎么弄)

  • 华为最近删除照片在哪恢复(华为最近删除照片在哪)

    华为最近删除照片在哪恢复(华为最近删除照片在哪)

  • qq空间怎么注销(QQ空间怎么注销关闭)

    qq空间怎么注销(QQ空间怎么注销关闭)

  • 小度能控制小米设备吗(小度能控制小米的灯吗)

    小度能控制小米设备吗(小度能控制小米的灯吗)

  • 苹果手机的英文名为什么是iPhone

    苹果手机的英文名为什么是iPhone

  • 不要挂机正在通话中什么意思

    不要挂机正在通话中什么意思

  • 苹果11微信发语音就卡住(苹果11微信发语音没声音怎么回事)

    苹果11微信发语音就卡住(苹果11微信发语音没声音怎么回事)

  • 小米手机有OTG功能吗

    小米手机有OTG功能吗

  • 路由器接口不够用怎么办(路由器接口不够用,怎么添加交换机)

    路由器接口不够用怎么办(路由器接口不够用,怎么添加交换机)

  • 微信一直闪屏怎么回事(微信一直闪屏怎么回事儿)

    微信一直闪屏怎么回事(微信一直闪屏怎么回事儿)

  • 怎样彻底收不到黑名单的短信(怎样彻底收不到黑名单的短信苹果手机)

    怎样彻底收不到黑名单的短信(怎样彻底收不到黑名单的短信苹果手机)

  • 苹果零售店是什么意思(苹果零售店什么时候有货)

    苹果零售店是什么意思(苹果零售店什么时候有货)

  • 手机卡销户是什么意思(手机卡销户什么时候办理)

    手机卡销户是什么意思(手机卡销户什么时候办理)

  • ipad应用闪退解决方法(ipad应用软件闪退)

    ipad应用闪退解决方法(ipad应用软件闪退)

  • powerpoint是啥软件(powerpoint叫什么)

    powerpoint是啥软件(powerpoint叫什么)

  • 微信京东怎么申请退款(微信京东怎么申请售后退款)

    微信京东怎么申请退款(微信京东怎么申请售后退款)

  • 苹果11无线充电如何打开(苹果11无线充电器)

    苹果11无线充电如何打开(苹果11无线充电器)

  • 华为手机插耳机的地方在哪里(华为手机插耳机有滋滋的声音怎么回事)

    华为手机插耳机的地方在哪里(华为手机插耳机有滋滋的声音怎么回事)

  • 操作系统在计算机系统中位于什么之间(操作系统在计算机与用户之间起的作用)

    操作系统在计算机系统中位于什么之间(操作系统在计算机与用户之间起的作用)

  • 微店可以无理由退货吗(微店无理由退货有保障吗)

    微店可以无理由退货吗(微店无理由退货有保障吗)

  • wifi自动下载怎么关闭(wifi自动下载安装包)

    wifi自动下载怎么关闭(wifi自动下载安装包)

  • 苹果xr耳机插哪里(苹果手机xr耳机插哪)

    苹果xr耳机插哪里(苹果手机xr耳机插哪)

  • 如何快充手机(手机如何快充)

    如何快充手机(手机如何快充)

  • 大雾笼罩下的巴伐利亚阿尔卑斯山脉,德国 (© Anton Petrus/Getty Images)(大雾笼罩的早晨)

    大雾笼罩下的巴伐利亚阿尔卑斯山脉,德国 (© Anton Petrus/Getty Images)(大雾笼罩的早晨)

  • 自然人密码怎么注册
  • 转租仓库交增值税吗
  • 会计准则折旧年限规定最新
  • 代扣代缴车船税手续费比例
  • 商业企业销售的产品
  • 无合同销售收入怎么算
  • 建筑行业挂靠代扣税款如何入账?
  • 公司贷款买车是公司还款吗
  • 开具的销项发票是否都要入收入科目吗?
  • 个人出租房屋合同协议书
  • 利润弥补以前年度亏损是税前吗
  • 软件项目成本包括直接成本和间接成本,一般而言
  • 股东投资设备一定要评估吗
  • 初级会计备课指点
  • 小规模自开专票税率是1%还是3%
  • 建筑业工人工资保障
  • 如何关闭win10自带杀毒软件
  • apple mac 系统
  • 开启开发人员模式的方法
  • 企业所得税避税的方法
  • win10文件夹状态已共享怎样取消
  • 利息费用可扣除什么
  • 房产权利转移
  • 购货人与收货人的关系
  • 土地增值税清算全流程实战案例
  • 进项税大于销项税,不用缴纳增值税
  • vue3.0用法
  • vue ref获取元素高度
  • 遮天传贴吧
  • aida理论包括哪些内容?
  • 个人所得税生产经营所得B表
  • 劳务公司怎么开税票
  • 双抬头发票认证
  • 个税累积税阶
  • 员工出差的费用计入什么科目
  • 浅谈php设计模式的理解
  • Linux sqlite3 基本命令
  • 对方开具红字发票,我方怎么查询
  • 自然人独资企业需要交企业所得税吗
  • 承兑汇票可以当现金借给别人用吗
  • 普票加专票超过45万怎么交税
  • 企业年有什么用
  • 无形资产未确认融资费用例题
  • 个人承担社保有哪些
  • 未计提坏账准备发生坏账如何处理
  • 辅导期一般纳税人什么意思
  • 增值税专用发票怎么开
  • 资产负债表中的存货怎么算
  • 库存商品怎么做表格
  • 如何证明自己是中国人
  • 当月计提公积金下月发放怎么做分录
  • 个体工商户和公司的优缺点
  • 生产成本比主营业务成本大
  • windows虚拟内存转移有什么危害
  • 机箱前面板是哪里
  • ubuntu系统鼠标没反应
  • linux连接vps
  • linux常用命令sed
  • 3种方法教你有效祛湿
  • bios识别不了硬盘怎么回事
  • dcom进程
  • win10预览体验三个选项
  • ubuntu18 设置静态ip
  • linux主机名是什么意思
  • 如何设置访问共享文件夹
  • 教你如何解决蓝光机/KODI无法打开局域网smb共享的问题
  • windows1020h2版本怎么样
  • linux windows转linux
  • Win10系统怎么使用经典事件查看器?
  • Sublime Text + decoda 调试Quick-cocos2d-x 游戏
  • android opengl绘图
  • js中使用组件
  • jquery给元素添加属性值
  • android FileNotFoundException(Is a Directory)解决办法
  • javascript 组件
  • 置顶聊天折叠怎么关闭
  • js继承的方法
  • 北京电子税务局实名认证
  • 光伏电站电力监控系统
  • 武汉市江汉区财政局这个单位的公务员待遇怎么样?
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设