Vue实践过程中的几个问题

前言

本篇是我在使用vue过程中,遇到的几个小问题和之前不了解的东西,记录下来,希望能够帮助各位踩坑。如果喜欢的话可以点波赞,或者关注一下,希望本文可以帮到大家。

本篇记录个人遇到的问题如下:

  1. 路由变化页面数据不刷新问题
  2. setTimeout/setInterval this指向改变,无法用this访问VUe实例
  3. setInterval路由跳转继续运行并没有销毁
  4. vue 滚动行为(浏览器回退记忆位置)用法
  5. vue路由拦截浏览器后退实现草稿保存类似需求
  6. v-once 只渲染元素和组件一次,优化更新渲染性能
  7. vue框架风格指南推荐

路由变化页面数据不刷新问题

场景:比如文章详情数据,依赖路由的params参数获取的(ajax写在created生命周期里面),因为路由懒加载的关系,退出页面再进入另一个文章页面并不会运行created组件生命周期,导致文章数据还是上一个文章的数据。

解决方法:watch监听路由是否变化

 watch: {
  ‘$route‘ (to, from) { //监听路由是否变化
    if(this.$route.params.articleId){//是否有文章id
      //获取文章数据
    }
  }
}

setTimeout/setInterval this指向改变,无法用this访问VUe实例

场景:

mounted(){
      setTimeout(function () { //setInterval同理
        console.log(this);//此时this指向Window对象
      },1000);
  }

解决方法:使用箭头函数或者

//箭头函数访问this实例 因为箭头函数本身没有绑定this
 setTimeout(() => {
   console.log(this);
}, 500);
//使用变量访问this实例
let self=this;
    setTimeout(function () {
      console.log(self);//使用self变量访问this实例
    },1000);

setInterval路由跳转继续运行并没有销毁

场景:

比如一些弹幕,走马灯文字,这类需要定时调用的,路由跳转之后,因为组件已经销毁了,但是setInterval还没有销毁,还在继续后台调用,控制台会不断报错,如果运算量大的话,无法及时清除,会导致严重的页面卡顿。

解决办法:在组件生命周期beforeDestroy停止setInterval

组件销毁前执行的钩子函数,跟其他生命周期钩子函数的用法相同。

beforeDestroy(){
     //我通常是把setInterval()定时器赋值给this实例,然后就可以像下面这么暂停。
    clearInterval(this.intervalid);
},

vue 滚动行为(浏览器回退记忆位置)用法

这个我当时做的时候以为很难,后来做好了才发现就是一个设置而已(前提是要开启路由的History 模式),下面做一个简单的分享。

路由设置

  1. 要使用这一功能,首先需要开启vue-router的 history模式

如果之前一直使用的是hash模式(默认模式),项目已经开发了一段时间,然后转history模式很可能会遇到:这些问题

  1. 滚动行为具体设置如下:

    const router = new VueRouter({
      mode: ‘history‘,
    scrollBehavior (to, from, savedPosition) {
        if (savedPosition) { //如果savedPosition存在,滚动条会自动跳到记录的值的地方
          return savedPosition
        } else {
          return { x: 0, y: 0 }//savedPosition也是一个记录x轴和y轴位置的对象
         }
        },
      routes: [...]
    })
    

vue滚动行为文档,可以进到这里看看更详细的信息。

vue路由拦截浏览器后退实现草稿保存类似需求

场景:

为了防止用户突然离开,没有保存已输入的信息。

用法:

//在路由组件中:
mounted(){
},
beforeRouteLeave (to, from, next) {
  if(用户已经输入信息){
    //出现弹窗提醒保存草稿,或者自动后台为其保存

  }else{
    next(true);//用户离开
  }

类似的还有beforeEachbeforeRouteUpdate,也分为全局钩子和组件钩子,见路由文档

v-once 只渲染元素和组件一次,优化更新渲染性能

觉得v-once这个api蛮6的,应该很多小伙伴都没有注意到这个api。

文档介绍:

这个api在我看来主要用于那些一次性渲染,并且不会再有操作更改这些渲染的值,这样就可以优化双向绑定的更新性能。

文档推荐:对低开销的静态组件使用 v-once

尽管在 Vue 中渲染 HTML 很快,不过当组件中包含大量静态内容时,可以考虑使用 v-once 将渲染结果缓存起来,就像这样:

Vue.component(‘terms-of-service‘, {
  template: ‘    <div v-once>      <h1>Terms of Service</h1>      ...很多静态内容...    </div>  ‘
})

vue风格指南推荐:

写到这里想到vue框架还有一个风格指南推荐,如下图所示,大家也可以学习一波。

小结

上面就是我分享的几个小问题,希望大家看了能够有所收获!另:今年准备北上,如果小伙伴的公司有坑,可以联系一下我。

最后:如需转载,请放上原文链接并署名。码字不易,感谢支持!本人写文章本着交流记录的心态,写的不好之处,不撕逼,但是欢迎指点。然后就是希望看完的朋友点个喜欢,也可以关注一下我。

原文地址:https://www.cnblogs.com/qiyan/p/10421647.html

时间: 2024-11-08 12:41:44

Vue实践过程中的几个问题的相关文章

网络编程的实践过程中总结出来的一些经验(转)

本文是我在进行MS-Windows.HP-Unix网络编程的实践过程中总结出来的一些经验,仅供大家参考.本文所谈到的Socket函数如果没有特别说明,都是指的Windows Socket API. 一.WSAStartup函数     int WSAStartup(       WORD wVersionRequested,         LPWSADATA lpWSAData       );    使用Socket的程序在使用Socket之前必须调用WSAStartup函数.该函数的第一个

Vue发布过程中遇到坑,以及webpack打包优化

前言 这段时间,本人自己做了一个vue画面部署到自己的服务器上,发现运行速度慢的的惊人,虽然服务器很渣(本人没什么钱,只能租最差的服务器,主要是给自己学习用的),但是这样开发出来的网站简直不能用,所以就查阅各种资料和网站,一步一步把代码包优化.这篇文章主要是把我调优的过程记录下来. 项目的基础框架是通过TypeScript官网取得的.各种基础框架模版 项目的构成 vue + ant-design + mysql + TypeScript vue项目地址 最后,关于如何在vue里面实现按需加载,请

angularJS实践过程中出现的问题总结

同名服务 在一次项目里,之前是同事写的.我有一次在异步获取服务器上的数据时,习惯把api地址写在一个服务Store里,但是程序总是返回Store.api.get()里的get is undefined.知道肯定是Store.api为空造成的原因:但是觉得应该是没有问题的才对,最后看到在页面里又重新定义了一次Store服务,所以造成了覆盖. myApp.factory('Store',function(){ return{ name:'zhang', age:25 } }) myApp.facto

vue 实践技巧合集

前言 本文纯属个人平时实践过程中的一些经验总结,算是一点点小技巧吧,不是多么高明的技术,如果对你有帮助,那么不胜荣幸. 本文不涉及罕见API使用方法等,大部分内容都是基于对vue的一些实践而已.由于涉嫌投机取巧,可能会带来一些不符合规范的副作用,请根据项目要求酌情使用. 多个页面都使用的到方法,放在 vue.prototype 上会很方便 刚接触 vue 的时候做过一件傻事,因为封装了一个异步请求接口post,放在 post.js 文件里面,然后在每个需要使用异步请求的页面引入 ``` impo

自动化接口用例从 1 到 1000 过程中的实践和思考

引言 当一个新人刚加入公司的时候,我们通常告诉新人怎么去写一个自动化用例:从工程配置到如何添加接口.如何使用断言,最后到如何将一个用例运行起来. 而在实际工作和业务场景中,我们常常面临着需要编写和组织一堆用例的情况:我们需要编写一个业务下的一系列的自动化接口用例,再把用例放到持续集成中不断运行.面临的问题比单纯让一个用例运行起来复杂的多. 本人加入公司不到一年,从写下第 1 个 case 开始,持续编写和运行了 1000 多个 case ,在这过程中有了一些思考.在本文中,和大家探论下如何编写大

如何排查无线AP在使用过程中的故障?

无线网络技术的飞速发展致使无线AP已渐渐融入我们的生活并与之密不可分.无线AP主要运用于企业.商场超市.酒店餐厅.学校工厂.展览展会等场所,为其构建WLAN并提供WiFi覆盖.很多终端用户觉得使用无线AP构建的商用WiFi的用户体验并不好,实际上快速好用的商用WiFi不仅要有好的无线AP设备做硬件支持,商户也应该对环境特点.最大用户数.产品特性.安装布局等多方位因素有个整体的了解,否则很可能选不到合适的WiFi覆盖方案或者即使有了可行度比较高的WiFi覆盖方案,在使用过程中出现一点小问题就手足无

根据自己的需要,把别人开发好的东西搬过来,优化and重构,在优化的过程中,甚至也会弄出一套全新的东西(转)

赵海平在今年三月份来到阿里,听毕玄(他现任主管)说去年五六月份就跟赵海平聊上了.有人问:为啥 BAT 三大巨头,你看中了阿里巴巴?在今天现场达一千多人的分享中赵海平给出了回复:“因为百度和腾讯没找我呗~”,他笑道,“百度以搜索为核心,优化了很多年了,估计也没啥可以优化的了:而腾讯除了 QQ 和微信,也没什么大型应用(别跟人家说哦)”.这不是原话哈,赵海平还是相当谦虚并且能言的,思维很开阔,两个小时的分享内容丰富,时不时还插两个故事,起初进场的手机和电脑都很自觉的收起来了~旁边的同事侃道:“高 P

谈 Kylin1.6 streaming kafka cube build 成功过程中遇到的坑

坑太多    --写在片首语 看着Kylin官网(http://kylin.apache.org/docs16/tutorial/cube_streaming.html)里的轻描淡写,似乎只要一步步按着它的步骤来做,就可以很快跑通并得到期待的果子 .但,然并卵...这次的实践让我很清醒地了解到, 在开源的世界里,真的是版本太多,bug太多,坑太多... 如果仅仅是阅读了文档一百遍,而并未去实践,那么也许仅仅阅读理解水平会提高不少.为了走完这一遍操作,得到期待的结果,居然cost 10 days!

Native项目迁入React-Native过程中遇到的坑(0.4x版本)

转载请注明出处王亟亟的大牛之路 最近都在忙着搭架子,找框架,谈需求和开会.甚至都没有时间好好装逼,昨天帮安卓的小伙把项目从安卓整体迁移到了RN的项目下面,过程中遇到很多不可描述的坑,这里给大家分享下经验 先安利,安卓收纳库:https://github.com/ddwhan0123/Useful-Open-Source-Android React-Native收纳库:https://github.com/ddwhan0123/Useful-Open-Source-React-Native 由来