1=> Vue3.0 和 2.0 的【响应式原理】区别
Vue3.x 改用 Proxy[pu luo k she] 替代 Object.defineProperty[di fai n prɒ pə ti]。
因为 Proxy 可以直接监听对象和数组的变化,
而Object.defineProperty是不可以直接对【数组】进行监听
Vue2 中修改数组的索引和长度无法被监控到。
对象新增的属性无法被Object.defineProperty监听到
2=> Vuex 页面刷新数据丢失怎么解决?
在刷新页面的时候,将vuex中的只存在本地
也可以使用第三方插件。 vuex-persist (pəˈsɪ s t])插件,
它是为 Vuex 持久化储存而生的一个插件。
3 你都做过哪些 Vue 的性能优化?
语法方面:
v-if 和 v-show 区分使用场景
computed 和 watch 区分场景使用
v-for 遍历必须加 key,key最好是id值,且避免同时使用 v-if
//数据方面
对象层级不要过深,否则性能就会差。
不需要响应式的数据不要放在 data 中(可以使用 Object.freeze() 冻结数据)
// 加载-缓存
路由懒加载
第三方插件的按需加载
适当采用 keep-alive 缓存组件
防抖、节流的运用
4 Vue.mixin 的使用场景和原理
在开发的过程中我们会遇见相同或者相似的逻辑代码。
可以通过vue的 mixin 功能抽离公共的业务逻辑,
然后通过impor再组件中引入。通过mixins注册进来。
这样我们就可以使用mixin中共同的业务逻辑
<script> import { mixinmethods} from "../mixin.js" export default { // mixins是固定的,里面传入一个数组 mixins:[mixinmethods] } </script>
如果组件中data数据与混合中的数据重复,会进行合并。使用data中的数据。
【组件中是可以直接使用混合中的数据的,自己理解】
需要注意的是:声明周期不会进行合并
如果你在混合中使用了生命周期,组件中也是用生命周期。
组件和混合中的生命周期都会被执行。
5. nextTick 使用场景和原理
场景:当组件使用v-if进行显示和销毁时,值为true的时候。
立刻获取组件的实例,就会出现undefiend
为什么会出现undefined?
Vue 实现响应式并不是数据发生变化之后 DOM 立即变化,而是按一定的策略进行 DOM 的更新。
原理:
nextTick 将回调延迟到下次 DOM 更新循环之后执行
6、 keep-alive 使用场景和原理
keep-alive 是 Vue 内置的一个组件,可以实现组件缓存,当组件切换时不会对当前组件进行卸载。
常用的两个属性 include/exclude,符合条件的组件或者页面进行缓存。 [include 是页面中的name ]
include的类型可以是字符串,数组,正则。
两个生命周期 activated/deactivated,用来得知当前组件是否处理活跃状态。
keep-alive 运用了 LRU 算法,选择最近【久未使用的组件】予以淘汰。
keep-alive其实还有一个属性max, 最大允许缓存多少个,如果超出最大个数。
会将已缓存组件中最久没有被访问的实例会被销毁掉。
[exs k lu d] exclude 排除
7、Vue.set 方法原理
在两种情况下修改 Vue 是不会触发视图更新的。
1、给响应式对象新增属性,这个时候是不会跟新视图的
2、直接更改【数组下标】来修改数组的值。
我们可以通过 Vue.set(this.userInfo, 'sex' ,'男')
或者 this.$forceUpdate() 来解决这个问题
set 原理如下
因为是响应式数据,
我们给对象和数组本身新增了__ob__属性,代表的是 Observer【饿 b zɜ və(r)】 实例。
如对象新增不存在的属性,首先会把新的属性进行响应式跟踪。
当数据发生变化后,watcher【ˈwɑːtʃər]】 去更新视图.
【使用splice方法向数组内添加元素时】该元素会自动被变成响应式的
源码:https://blog.csdn.net/leelxp/article/details/107212555
8 assets 和static【不会打包】的区别
答:相同点:assets【a sai s 】和static两个都是存放静态资源文件,
图片,字体图标,都可以放在这两个文件下。
不相同点:
build的时候会将assets中放置的静态资源文件【会进行】打包压缩上传.
最终会放置在static中跟着index.html一同上传至服务器。
static中放置的静态资源文件就【不会】打包压缩
建议:将项目中样式文件js文件等都可以放置在assets中,
走打包这一流程。减少体积。
而项目中引入的第三方的资源文件如iconfoont.css等文件可以放置在static中,
因为这些引入的第三方文件已经经过处理,我们不再需要处理,直接上传。
巧计:听读音, assets 有压缩。
明天继续看-------------------