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