vue data数据修改_【前端】那些容易忘掉的前端知识 Vue梳理篇

Vue

v-show和v-if有什么区别

  • v-show 通过 CSS display 控制显示和隐藏
  • v-if 组件真正的渲染和销毁,而不是显示和隐藏

为何在v-for使用key

  • 必须用 key , 且不能是 index 和 random
  • diff 算法中通过 tag 和 key 来判断,是否是 sameNode
  • 减少渲染次数,提升渲染性能

Vue 组件生命周期(包括父子组件)

参考:Vue生命周期

Vue 组件如何通信(常见)

  • 父子组件 props 和 this.$emit
  • 自定义事件 event.$no event.$off event.$emit
  • vuex

描述组件渲染和更新的过程

3bb1ff402e0ab8f8cde784185b4da7c4.png

如上图所示,vue原理三大模块:响应式、模板渲染、vdom

初次渲染过程

  • 解析模板为 render 函数 (或在开发环境已完成,vue-loader)
  • 触发响应式,监听 data 属性 getter、 setter
  • 执行 render 函数,生成 vnode ,patch(elem,vnode)

更新过程

  • 修改 data,触发 setter(此前在 getter 中已被监听)
  • 重新执行 render 函数,生成 newVnode
  • patch(vnode,newVnode)

with 语法

e7dd92cb78e924763772b5e3623688e6.png
改变 { } 内自由变量的查找规则,当做 obj 属性来查找如果找不到匹配的 obj 属性,就会报错with 要慎用,它打破了作用域规则,易读性变差

vue为何是异步渲染

  • 减少 DOM 操作次数,提高性能

$nextTick 待 DOM 渲染完后再回调,页面渲染时会将 data 的修改做整合,多次 data 修改只会渲染一次。

3422e29dd8d3319a3f2a27e8de6d1831.png

双向数据绑定 v-model 的实现原理

  • input 元素的 value = this.name
  • 绑定 input 事件 this.name = $event.target.value
  • data 更新触发 re-render

对 MVVM 的理解

6051a561a28b6bb45006054d08c57623.png

computed 有何特点

  • 缓存,data 不变不会重新计算
  • 提高性能

为何组件 data 必须是一个函数

fbc34fe5d466014b381c9240a317447b.png

如上图所示,这个不是 vue 相关问题,而是关于 js 方面问题。vue 文件编译之后实际上是 class ,是一个类。而对组件使用的时候,相当于对组件进行了实例化。如果 data 不是一个函数的话,那每一个组件实例就共享了,就会造成数据污染问题。而函数的话,就会形成闭包,保护变量,不会造成影响。

ajax 请求应该放在哪个生命周期

  • mounted
  • JS 是单线程的,ajax 异步获取数据
  • 放在 mounted 之前没有用,只会让逻辑更加混乱

如何将组件所有 props 传递给子组件

  • $pros
  • 用法:
如何自己实现 v-model

如何自己实现 v-model

6afb6a9c178571c1500b4ce7011d0e8f.png

多个组件有相同的逻辑,如何抽离

  • mixin

何时要使用异步组件

  • 加载大文件
  • 路由异步加载
  • 优化性能

何时使用 keep-alive

  • 缓存组件,不需要重复渲染
  • 如多个静态 tab 页的切换
  • 优化性能

何时需要使用 beforeDestory

  • 解绑自定义事件 event.$off
  • 清除定时器
  • 解绑自定义的 DOM 事件,如window scroll 等

什么是作用域插槽

fc3ff9e81f0e56d23513b330a2987cf6.png

请用 vnode 描述一个 DOM 结构

场景:

5fd5f4edee61989e569a6842edffd614.png

vnode:

c9352a6c5359ad58405ab204f341e021.png

diff 算法的时间复杂度

  • O(n)
  • 在O(n^3)上做了优化

简述 diff 算法过程

  • patch ( elem , vnode ) 和 patch ( vnode , newVnode )
  • patchVnode 和 addVnodes 和 removeVnodes
  • updateChildren (key的重要性)

vue 常见性能优化方式

  • 合理使用 v-show 和 v-if
  • 合理使用 computed
  • v-for 时加 key,以及避免和 v-if 同时使用
  • 自定义事件、DOM事件及时销毁
  • 合理使用异步组件
  • 合理使用 keep-alive
  • data 层级不要太深
  • 使用 vue-loader 在开发环境做模板编译(预编译)
  • webpack层面的优化(传送门)
  • 使用SSR
ab7857b11bef891ebc5fa3d21a05f995.png
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值