位置: IT常识 - 正文

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

发布时间:2024-01-13
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创始人阿尔特曼 取向)

  • 阿尔法狗vs柯洁(阿尔法狗)(阿尔法狗vs柯洁回放)

    阿尔法狗vs柯洁(阿尔法狗)(阿尔法狗vs柯洁回放)

  • 抖音如何设置定时关闭(抖音如何设置定时关闭直播)

    抖音如何设置定时关闭(抖音如何设置定时关闭直播)

  • 云闪付在什么地方能用(云闪付在什么地方抢券)

    云闪付在什么地方能用(云闪付在什么地方抢券)

  • 苹果7plus返回键如何设置(苹果7plus返回键坏了能修吗)

    苹果7plus返回键如何设置(苹果7plus返回键坏了能修吗)

  • apple store是什么

    apple store是什么

  • 华为was tl10是什么型号

    华为was tl10是什么型号

  • 微信怎么自动退出了登录(微信怎么自动退群)

    微信怎么自动退出了登录(微信怎么自动退群)

  • 电脑白屏按什么键恢复(电脑白屏按什么键退出)

    电脑白屏按什么键恢复(电脑白屏按什么键退出)

  • 苹果的闹钟为什么关了还是会叫(苹果的闹钟为什么不提示多久以后会响)

    苹果的闹钟为什么关了还是会叫(苹果的闹钟为什么不提示多久以后会响)

  • 哈飞路宝电脑插头在哪(哈飞路宝电脑板在那里)

    哈飞路宝电脑插头在哪(哈飞路宝电脑板在那里)

  • 优酷没办法改昵称(优酷没办法改昵称怎么改)

    优酷没办法改昵称(优酷没办法改昵称怎么改)

  • qq开了录音权限还说不了话(qq录音权限打开了还是没声音)

    qq开了录音权限还说不了话(qq录音权限打开了还是没声音)

  • 苹果手机为什么下载不了软件(苹果手机为什么连不上wifi)

    苹果手机为什么下载不了软件(苹果手机为什么连不上wifi)

  • 荣耀play3什么时候出的(荣耀play3多久出的)

    荣耀play3什么时候出的(荣耀play3多久出的)

  • word文档怎么样设双页显示(word文档怎么样可以横版竖版)

    word文档怎么样设双页显示(word文档怎么样可以横版竖版)

  • 坚果手机是哪国的产品(坚果手机是哪里的)

    坚果手机是哪国的产品(坚果手机是哪里的)

  • 如何更改qq所有字体(如何更改qq所有头像)

    如何更改qq所有字体(如何更改qq所有头像)

  • 微型计算机按照结构可以分为哪几种(微型计算机按照装机方式分为哪几类)

    微型计算机按照结构可以分为哪几种(微型计算机按照装机方式分为哪几类)

  • apple store如何取消自动续费(applestore如何取消退货申请)

    apple store如何取消自动续费(applestore如何取消退货申请)

  • 一周cp软件如何注销(一周cp软件没有了)

    一周cp软件如何注销(一周cp软件没有了)

  • 最右服务器失败怎么回事(最近的服务器)

    最右服务器失败怎么回事(最近的服务器)

  • rtos.exe - rtos是什么进程 有什么用(rtos有什么用)

    rtos.exe - rtos是什么进程 有什么用(rtos有什么用)

  • Autorun.inf是什么文件?Autorun.inf果真就是病毒吗?(autotun.inf)

    Autorun.inf是什么文件?Autorun.inf果真就是病毒吗?(autotun.inf)

  • 电脑卡住了按什么键都不管用关机也关不了解决方法(电脑卡住了按什么键回到桌面)

    电脑卡住了按什么键都不管用关机也关不了解决方法(电脑卡住了按什么键回到桌面)

  • 基于Java+Springboot+vue在线版权登记管理系统设计实现

    基于Java+Springboot+vue在线版权登记管理系统设计实现

  • vue3:安装配置sass(vue3 安装)

    vue3:安装配置sass(vue3 安装)

  • python方差检验是什么意思(python方差齐性检验)

    python方差检验是什么意思(python方差齐性检验)

  • 企业季度所得税计算公式
  • 哪些税种属于中央固定收入
  • 贷方账户日累计金额超限怎么办
  • 漏报了残保金如何调整?
  • 其他应收款可以在贷方吗
  • 专票 附加费
  • 营业成本占营业收入比重较低的原因
  • 预缴企业所得税怎么做会计分录
  • 污水处理企业如何捕捉碳中和减少了的碳足迹
  • 在建投资性物业管理办法
  • 单位房屋出租转投资性房地产怎么转?
  • 品牌活动推广文案
  • 其他公司向本企业借款
  • 工程维修费用怎么入账
  • 固定资产作为实收资本报废怎么处理
  • 开完红字发票后,正数发票如何开具?
  • 持有至到期投资属于什么科目
  • 子女继承房地产怎么交税
  • 企业发放给员工子女抚养费
  • 个税什么情况可以不用汇算
  • 减半征收城建税文件
  • 独立核算分公司可以享受小型微利企业优惠吗
  • 在会计实务中财务报表附注的披露方法不包括
  • 金税盘发票报送状态未报送
  • 增值税增量留抵退税政策解读
  • 自用煤怎么入账
  • 常见的dump抓取方法
  • 公司收到保险公司赔款
  • 会计差错更正处理
  • 未分配利润转增股本 母公司会计分录
  • 建筑设备出租并配备人员
  • 取得增值税发票的认证期限是多久?
  • element ui el-tree
  • 黄石国家公园的建立意义
  • 税款滞纳金会计处理
  • 公司电路改造费怎么账务处理
  • 自产的产品对外捐赠
  • ros urdf
  • php如何实现
  • 3d reconstruction
  • yum安装php5
  • winform 文件上传
  • 工会捐款怎么账务处理
  • 应收利息会计分局
  • 购买图书可以开增值税专票么?
  • 以前年度损益调整结转到本年利润吗
  • 土石方工程的税费缴纳方法
  • 什么是预付账款的管理重点
  • 基本户转到法人账户会计分录
  • dedecms仿站如何做
  • sql 临时表格
  • 织梦自定义字段
  • db2 linux
  • 可供出售金融资产现在叫什么
  • 公司利润如何提取避税
  • 安装调试费计入
  • 上个月的发票未开具
  • 退回多交的所得税抵欠税怎么做账
  • 工程物资原材料在资产负债表哪个科目体现
  • 物业所在地是指物业住所地吗
  • 工会发放节日慰问品种类
  • 企业发票冲红的风险
  • 公司购买垃圾袋可以抵扣吗
  • 行政事业单位经济责任审计的主要内容
  • 未认证的进项税额转出怎么做分录
  • 内部交易固定资产折旧为什么调整
  • win7怎么设置桌面位置
  • 怎么给网络设置防火墙
  • 如何关闭office开机自启动
  • 删除文件或文件夹时出错怎么办
  • window10 360
  • linux bye
  • 轨迹球怎么调出来
  • document.getElementByTagName
  • 基于jquery实现小说
  • nodejs xhr
  • shell 算数计算
  • python函数经典例程
  • 企业如何注册电子税务局账号
  • 企业所得税法中所称有关的支出是指
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号