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

  • 微信如何看出好友在线(微信怎么看好友)

    微信如何看出好友在线(微信怎么看好友)

  • 苹果手机个性化主题怎么设置(苹果手机个性化广告在哪里)

    苹果手机个性化主题怎么设置(苹果手机个性化广告在哪里)

  • 微信发什么会掉星星(微信发什么会掉兔子)

    微信发什么会掉星星(微信发什么会掉兔子)

  • raw和jpg有什么区别(raw和raw+jpeg的区别)

    raw和jpg有什么区别(raw和raw+jpeg的区别)

  • 为什么找不到快手小店了(为什么找不到快手文件夹)

    为什么找不到快手小店了(为什么找不到快手文件夹)

  • 进网试用是什么意思(进网试用是什么意男)

    进网试用是什么意思(进网试用是什么意男)

  • oppoace2屏幕多大(oppoace2屏幕比例是多少)

    oppoace2屏幕多大(oppoace2屏幕比例是多少)

  • 蓝牙4.1和5.0的音质有区别吗(5.0蓝牙和4.2蓝牙音质产有什么区别)

    蓝牙4.1和5.0的音质有区别吗(5.0蓝牙和4.2蓝牙音质产有什么区别)

  • 钉钉为什么没有直播回放(钉钉为什么没有打卡的界面)

    钉钉为什么没有直播回放(钉钉为什么没有打卡的界面)

  • 苹果手机短信怎么发不了照片(苹果手机短信怎么隐藏)

    苹果手机短信怎么发不了照片(苹果手机短信怎么隐藏)

  • 设置24小时到账可以退回吗(微信在哪里设置24小时到账)

    设置24小时到账可以退回吗(微信在哪里设置24小时到账)

  • 微信视频响两声对方忙线中是什么意思(微信视频响两声对方忙是什么原因)

    微信视频响两声对方忙线中是什么意思(微信视频响两声对方忙是什么原因)

  • stl文件用什么软件打开(stl文件 软件)

    stl文件用什么软件打开(stl文件 软件)

  • 回收站清空了怎么恢复(回收站清空了怎么防止恢复)

    回收站清空了怎么恢复(回收站清空了怎么防止恢复)

  • 怎么看出对方qq被注销(怎么看出对方qq音乐被注销)

    怎么看出对方qq被注销(怎么看出对方qq音乐被注销)

  • 地铁安检会损坏电脑吗(地铁安检会损坏平板吗)

    地铁安检会损坏电脑吗(地铁安检会损坏平板吗)

  • 排版对比四大原则(排版对比四大原理是什么)

    排版对比四大原则(排版对比四大原理是什么)

  • word文档虚线怎么画(word文档 虚线)

    word文档虚线怎么画(word文档 虚线)

  • 苹果x双摄像头使用技巧(苹果x双摄像头怎么切换)

    苹果x双摄像头使用技巧(苹果x双摄像头怎么切换)

  • 微博怎么设置定时发送(微博怎么设置定点发微博)

    微博怎么设置定时发送(微博怎么设置定点发微博)

  • 微信收款码限额怎么办(微信收款码限额度吗)

    微信收款码限额怎么办(微信收款码限额度吗)

  • 微信怎么设置密码锁不让别人看(微信怎么设置密码才能进入)

    微信怎么设置密码锁不让别人看(微信怎么设置密码才能进入)

  • jkm-al00什么型号手机(jkm—al00a是什么型号)

    jkm-al00什么型号手机(jkm—al00a是什么型号)

  • OPPO手机桌面时钟怎么设置(oppo手机桌面时间不见了怎么恢复)

    OPPO手机桌面时钟怎么设置(oppo手机桌面时间不见了怎么恢复)

  • 小米手环怎么添加卡包(小米手环怎么添加加密门禁卡)

    小米手环怎么添加卡包(小米手环怎么添加加密门禁卡)

  • 查找手机怎么用(查找手机怎么用OPPO)

    查找手机怎么用(查找手机怎么用OPPO)

  • 汇算清缴研发费用加计扣除优惠明细表
  • 个体工商户所得税核定征收2023
  • 房地产印章图片
  • 税法规定固定资产最低价格
  • 中级财务会计计算分析题
  • 什么需要填
  • 公司废料收入如何分配
  • 金蝶标准版如何结转到下月
  • 异地分公司需要什么手续
  • 费用票如何做账务处理
  • 小规模纳税人免征增值税政策
  • 退伍士兵增值税减免账务处理
  • 利用废旧物资生产设备
  • 资本化的借款利息支出计入什么科目
  • 什么税不计入税金及附加科目
  • 土地补偿款收入要交什么税
  • 购买生产用品会计分录
  • 股权拍卖溢价部分如何做会计处理?
  • 服务业发票税率是多少
  • 劳务费开发票还要代扣代缴吗?
  • 税报错了可以更改吗
  • 利润表所得税费用计算公式
  • 外购货物用于职工福利企业所得税怎么调整
  • 制造企业材料返回流程图
  • 租赁合同未付款生效吗
  • 租赁设备发票备注栏怎么填写
  • 房产免租期间缴纳房产税吗
  • m1 mac 恢复出厂
  • dll缺失怎么修复
  • 普通发票用记账吗
  • 个体工商户经营范围分类目录
  • PHP:oci_password_change()的用法_Oracle函数
  • win11怎么用户改名
  • php数组函数大全
  • vite config
  • 出口退免税备案
  • 二手车销售发票的开具怎么处理?
  • php开发实例大全
  • less中使用js变量
  • 小微企业认定标准时间
  • 微信小程序在哪里打开
  • vue3动态路由权限
  • 最新前端面试题
  • 区块链技术开发入门
  • php防止用户重度登录
  • 用php写个简单的编程
  • 公司员工抽奖活动
  • 滞纳金的计算公式为
  • 采购发票生成的会计凭证
  • 分公司要所得税汇算吗
  • 预付卡发票能否抵扣
  • 发行公司债券发生的折价
  • db2入门
  • 如何填制费用报销单
  • 出口退免税的条件
  • 以前年度损益调整在利润表中怎么填
  • 购房发票丢了怎么收房
  • 无形资产摊销能加计扣除吗
  • 事业单位会计制度
  • mysql解压版
  • mysql5.5中文乱码解决
  • linux和windows交互
  • win8任务栏假死
  • Win8出现奇怪爆音的完美解决方法
  • win8电脑设置在哪
  • win10正式版和专业版的区别
  • scumpve服务器
  • opengl数据类型
  • angularjs2
  • nodejs xhr
  • bat 批处理文件
  • jsonp如何解决跨域问题
  • unity后期
  • 新收入准则租赁业务
  • 税务软件服务商
  • 国税发票打印汇总怎么弄
  • 稳岗补贴是否需要发放
  • 郑州二套房契税征收2023标准是多少
  • 保险行业税务处理
  • 税务局 周六
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设