vue理解三

145 阅读4分钟

1.双向绑定的理解

双向绑定的指令v-model,可以绑定一个动态值到视图上,同时可以修改视图能改变数据对应数据。

v-model 指令在表单 input等元素上创建双向数据绑定,v-model是语法糖

text 使用 value 属性和 input 事件 checkbox 使用 checked 属性和 change 事件

如下例子:

 <input v-model='val'> 

 <input v-bind:value="val"  v-on:input="val = $event.target.value">

2.nextTick

vue视图更新是异步的,使用nextTick方法可以保证用户自定义逻辑更新后执行。

数据同步,视图更新是异步。

nextTick不是异步方法,就是将处理数据放入任务数组里,依次执行,所以数据未更新,使用nextTick是获取不到更新后的数据的。

当数据发生变化,Vue将开启一个异步更新队列,视图需要等队列中所有数据变化完成之后,再统一进行更新。 能用微任务就是微任务,没有微任务就是宏任务,nexttick内的方法存起来,等dom更新完成之后去执行

获取更新后的DOM,多次调用nextTick会被合并。

vue3 没有梯处理逻辑,不考虑兼容性,也没有了优雅降级。

3.虚拟DOM

就是js对象来描述真实DOM,提高操作效率,通过diff算法对比差异进行更新,减少了对真实DOM的操作。

虚拟DOM不依赖真实平台,实现跨平台。

VDOM 通过模板转换成函数,挂载过程中调用render函数,返回虚拟DOM,在patch方法转为真实DOM

当数据发生变化,重新渲染,生成新的VDOM。新的和旧的的VDOMdiff算法,更改部分用到真实DOM上。

4.Gzip

Gzip 是一种压缩算法。

在Vue项目中使用Gzip压缩通常是在构建过程中通过webpack配置来实现的。

两种方式:1.服务端开启使用,服务端压力大,带宽消耗大 2.打包时使用,dist文件大。

两种方法混合用比较合适,在 webpack 打包时,配置只对超过一定体积的文件进行压缩,在配置 nginx ,当浏览器发起请求时,服务端对 .gz 文件进行直接传输给浏览器,对源文件先进行实时压缩,在返回给浏览器。

npm install --save-dev compression-webpack-plugin

会在构建生产环境时自动压缩js, css, 和html文件

5.data是个函数

避免造成数据污染。

根实例对象可以是对象也可以是函数,因为是单例的。

组件实例对象必须是函数,防止多个组件实例对象共用一个data. 如果是对象的话,创建实例,数据会被共享,设置成函数实现数据隔离。

vue3不需要考虑了,一切都是从组件开始,都是一个函数,不需要进行区分了。

6.函数组件

无状态,无生命周期,无this,性能高。

没有new的过程

使用 : template functional

7.过滤器

不改变原始数据,只是对数据进行加工处理后返回过滤后的数据在进行调用处理,是个纯函数。

常用场景:时间格式化,千分符等。

vue3不用了。直接可以写函数进行过滤

8.keep-alive

缓存组件,切换组件时进行缓存,保存当前的DOM节点,下次使用重新激活,缓存的实例拿到之前缓存的DOM进行渲染。

动态组件可以使用keep-alive

路由中使用,页面是否需要缓存

9.性能优化

1.数据层级不要过深。

2.Object.freeze()方法冻结属性,不能进行get set方法。

3.使用数据缓存,避免频繁取值。

4.合理设置key

5.v-show和v-if 选取。频繁修改使用v-show

6.页面组件化

7.函数组件提升性能

8.异步组件

9.使用keep-alive缓存组件

10.虚拟滚动,时间分片

10.跨越问题

跨域是浏览器同源策略造成的。

1、后端需要进行设置 CORS 跨域资源共享。

2.构建工具反向代理,nginx反向代理。

3.使用websocket 进行通信。

4.搭BFF解决,前端服务的服务器。

11.v-show 和 v-if

v-if条件不成立 DOM中删除

v-show 想保留,在改变成display 显示或隐藏DOM 类似display

12.权限管理

登录权限:token保存本地,发送请求时携带token,后端进行验证,页面刷新使用token获取用户权限

页面权限:配置路由一个通用的,一个需要权限的,通过权限列表对应路由信息,通过addRoutes动态添加路由

访问权限:通过路由守卫判断用户是否有权限,

按钮权限:自定义指令实现,后端返回对应权限,在按钮上使用指令判断按钮权限。