vue.js的十条必会知识点(二)

121 阅读3分钟
1、改变data中属性值,视图不会立即同步执行重新渲染

vue实现响应式并不是数据发生变化之后DOM立即变化,而是按一定策略进行DOM的更新,vue在更新DOM时是异步执行的,只要侦听到数据变化,vue将开启一个队列,并缓冲在同一事件循环中发生的所有数据变更

2、mixin和extends

mixin和extends均是用来合并、拓展组件的

3、assets和static的异同点

相同点:都是存放静态资源文件,项目中所需要的资源文件图片,字体图标,样式文件等都可以放在这两个文件下

不同点:assets中的文件在项目打包时,会进行打包上传,static中的文件不会走打包压缩代码格式化等流程,而是直接进入打包好的目录,直接上传至服务器

建议:将项目中templete需要的样式文件js文件等都可以放置在assets中,走打包这一流程,减少体积。项目中引入的第三方资源文件,如iconfont.css等文件可以放置在static中,因为这些引入的第三方文件已经经过处理

4、vue的性能优化

编码阶段

尽量减少data中的数据,data中的数据都会增加getter和setter,会收集对应的watcher;

v-if和v-for不能连用;

如果需要使用v-for给每项元素绑定事件时使用事件代理;

SPA页面采用keep-alive缓存组件;

key保证唯一;

使用路由懒加载、异步组件;

防抖、节流;

第三方模块按需导入;

长列表滚动到可视区域动态加载;

图片懒加载;

SEO优化

预渲染

服务端渲染SSR

打包优化

压缩代码

使用cdn加载第三方模块

多线程打包

sourceMap优化

5、vue初始化页面闪动问题

vue初始化之前,由于div是不归vue管的,所以我们写的代码在还没有解析的情况下,会容易出现花屏现象,看到类似于{{message}}字样

可以在css上加上:[v-clock]{display:none};

如果仍没有解决,则在根元素上加上style="display:none;" :style="{display:'block'}"

6、route和router的区别

$route是路由信息对象,包括path,params,hash,query,fullPath,matched,name等路由信息参数

$router是路由实例对象包括了路由的跳转方法,钩子函数等

7、如何定义动态路由以及获取动态参数

1、params方式

配置路由格式:/router/:id;

传递的方式:在path后面跟上对应的值;

传递后形成的路径:/router/123;

获取参数:$route.params.userid

2、query方式

配置路由格式:/router;

传递的方式:对象中使用query的key作为传递方式;

传递后形成的路径:/route?id=123;

获取参数:$route.query

8、params和query的区别

用法:query要用path来引入,params要用name来引入

url显示:query类似于ajax中get传参,params类似于post,前者在浏览器地址栏中显示参数,后者不显示

query刷新不会丢失query里面的数据,params刷新会丢失params里面的数据

9、路由模式的区别

hash:有#;不经过服务器;不需要后端配合;底层原理:跳转window.location.href,监听onhashchange

history:跳转history API,histoty.pushState和history,replaceState监听onpopState(前进/后退)

10、computed、methods和watch的区别
  1. computed属性的结果会被缓存,除非依赖的响应式属性变化才会重新计算。主要当作属性来使用;
  2. methods方法表示一个具体的操作,主要书写业务逻辑;
  3. watch一个对象,键是需要观察的表达式,值是对应回调函数。主要用来监听某些特定数据的变化,从而进行某些具体的业务逻辑操作;可以看作是computed和methods的结合体;