广告
返回顶部
首页 > 资讯 > 精选 >vue项目中created()被调用多次的问题怎么解决
  • 751
分享到

vue项目中created()被调用多次的问题怎么解决

2023-07-05 18:07:08 751人浏览 八月长安
摘要

本文小编为大家详细介绍“Vue项目中created()被调用多次的问题怎么解决”,内容详细,步骤清晰,细节处理妥当,希望这篇“vue项目中created()被调用多次的问题怎么解决”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来

本文小编为大家详细介绍“Vue项目中created()被调用多次的问题怎么解决”,内容详细,步骤清晰,细节处理妥当,希望这篇“vue项目中created()被调用多次的问题怎么解决”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。

一、问题描述

最近碰到一个奇怪的生产问题:

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

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

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

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

二、排查过程

从头开始排查前端项目,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') }

继续,查看./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()    }  }}

其中,当上一步执行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,否则就不显示。

根据生产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次。

正确代码如下:

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

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

三、备注

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

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

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

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

读到这里,这篇“vue项目中created()被调用多次的问题怎么解决”文章已经介绍完毕,想要掌握这篇文章的知识点还需要大家自己动手实践使用过才能领会,如果想了解更多相关内容的文章,欢迎关注编程网精选频道。

--结束END--

本文标题: vue项目中created()被调用多次的问题怎么解决

本文链接: https://www.lsjlt.com/news/354077.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • vue项目中created()被调用多次的问题怎么解决
    本文小编为大家详细介绍“vue项目中created()被调用多次的问题怎么解决”,内容详细,步骤清晰,细节处理妥当,希望这篇“vue项目中created()被调用多次的问题怎么解决”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来...
    99+
    2023-07-05
  • Vue项目中怎么解决跨域问题
    本篇内容主要讲解“Vue项目中怎么解决跨域问题”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Vue项目中怎么解决跨域问题”吧!跨域跨域报错是前端开发中非常经典的一个错误,报错如下 Ac...
    99+
    2023-07-02
  • Vue开发项目中的兼容问题怎么解决
    今天小编给大家分享一下Vue开发项目中的兼容问题怎么解决的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。1. KingEdit...
    99+
    2023-07-04
  • vue-cli创建项目的loader问题怎么解决
    这篇文章主要介绍“vue-cli创建项目的loader问题怎么解决”,在日常操作中,相信很多人在vue-cli创建项目的loader问题怎么解决问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”vue-cli创建...
    99+
    2023-07-04
  • Vue项目中input框focus时不调出键盘问题的解决
    目录input框focus时不调出键盘问题自动获取input焦点(内含ios不能唤起键盘解决方法)最开始的用法如果想要解决ios不生效办法input框focus时不调出键盘问题 在移...
    99+
    2022-11-13
  • 如何解决vue项目中type=”file“ change事件只执行一次的问题
    这篇文章将为大家详细讲解有关如何解决vue项目中type=”file“ change事件只执行一次的问题,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。问题描述在最近的项目...
    99+
    2022-10-19
  • Vue项目中使用addRoutes出现问题的解决方法
    目录前言 一、404页面 1. 出现的原因 2. 解决方案 二、刷新白屏 1. 出现原因 2. 解决方案 三、路由重复 1.  出现原因 2. 解决方案 总结前言 add...
    99+
    2022-11-12
  • 用electron打包vue项目中的报错问题及解决
    目录1.  首先一定要cd到项目的根目录2.  接下来运行如何用electron打包vue项目,请参见我的另一篇文章:如何用electron打包vue项目为桌面应...
    99+
    2022-11-13
  • Vue项目中使用setTimeout存在的潜在问题及解决
    目录使用setTimeout存在的潜在问题上代码总结使用setTimeout存在的潜在问题 在开发项目中遇到这样的序曲,点击按钮弹框,每次进入的时候都需要默认选中Android, 这...
    99+
    2023-01-28
    Vue使用setTimeout 使用setTimeout的潜在问题 Vue setTimeout
  • vue项目proxyTable配置和部署服务器的问题怎么解决
    这篇文章主要介绍“vue项目proxyTable配置和部署服务器的问题怎么解决”,在日常操作中,相信很多人在vue项目proxyTable配置和部署服务器的问题怎么解决问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家...
    99+
    2023-06-30
  • vue项目中的public、static及指定不编译文件问题怎么解决
    这篇文章主要介绍“vue项目中的public、static及指定不编译文件问题怎么解决”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“vue项目中的public、static及指定不编译文件问题怎么解...
    99+
    2023-07-05
  • springmvc项目使用@Valid+BindingResult遇到的问题怎么解决
    本篇内容介绍了“springmvc项目使用@Valid+BindingResult遇到的问题怎么解决”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有...
    99+
    2023-06-21
  • Vue+tsx使用slot没有被替换的问题怎么解决
    本篇内容介绍了“Vue+tsx使用slot没有被替换的问题怎么解决”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!目录前言发现问题解决后记前言...
    99+
    2023-06-20
  • vue项目中使用lib-flexible如何解决移动端适配的问题
    这篇文章将为大家详细讲解有关vue项目中使用lib-flexible如何解决移动端适配的问题,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。第一部分:项目中引入lib-fl...
    99+
    2022-10-19
  • vue中ref的使用问题怎么解决
    本文小编为大家详细介绍“vue中ref的使用问题怎么解决”,内容详细,步骤清晰,细节处理妥当,希望这篇“vue中ref的使用问题怎么解决”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。vue的ref(this.$r...
    99+
    2023-06-29
  • vue项目中使用axios遇到的相对路径和绝对路径问题怎么解决
    这篇文章主要讲解了“vue项目中使用axios遇到的相对路径和绝对路径问题怎么解决”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“vue项目中使用axios遇到的相对路径和绝对路径问题怎么解决...
    99+
    2023-06-30
  • 如何解决vue项目中页面调用数据在数据加载完毕之前出现undefined的问题
    这篇文章主要介绍如何解决vue项目中页面调用数据在数据加载完毕之前出现undefined的问题,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!在项目中遇到后台数据还没有加载完毕,但是页...
    99+
    2022-10-19
  • java高级用法之JNA中的回调问题怎么解决
    今天小编给大家分享一下java高级用法之JNA中的回调问题怎么解决的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。简介什么是c...
    99+
    2023-06-30
  • 旧项目升级新版Unity2021导致Visual Studio无法使用的问题怎么解决
    本篇文章为大家展示了旧项目升级新版Unity2021导致Visual Studio无法使用的问题怎么解决,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。在项目开发过程中,不可避免的会升级开发...
    99+
    2023-06-22
  • 在Vue中使用dhtmlxGantt组件时遇到的问题怎么解决
    本文小编为大家详细介绍“在Vue中使用dhtmlxGantt组件时遇到的问题怎么解决”,内容详细,步骤清晰,细节处理妥当,希望这篇“在Vue中使用dhtmlxGantt组件时遇到的问题怎么解决”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢...
    99+
    2023-07-05
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作