Vue基础

148 阅读4分钟

1. Vue的生命周期方法有哪些?一般在哪一步发送请求?

可以理解vue生命周期就是指vue实例从创建到销毁的过程,在vue中分为8个阶段:创建前/后,载入前/后,更新前/后,销毁前/后。

a. 创建实例

  • beforeCreate:这个阶段实例已经初始化,指数数据观察与事件机制尚未形成,不能获取DOM节点(没有data,没有el)。在当前阶段data、methods、computed以及watched上的数据和方法都不能被访问。
  • created: 实例已经创建,仍然不能获取DOM节点(有data,没有el)。模板渲染成html前调用,此时可以获取data和methods,可以初始化某些属性值,然后再渲染成视图,异步操作可以放在这里。

b. 载入数据

  • beforeMount: 是个过渡阶段,此时依然获取不到具体的DOM节点,但是vue挂载的根节点已经创建(有data,有el
  • mounted: 数据和DOM都已经被渲染出来。模板渲染成html后调用,通常是初始化页面完成后再对数据和DOM做一些操作,需要操作DOM的方法可以放在这里

c. 更新

  • beforeUpdate: 数据更新时调用,发生在虚拟Dom重新渲染和打补丁之前。可以在这个钩子中进一步地更改状态,这不会触发附加的重渲染过程。
  • updated: 发生在更新完成之后,当前阶段组件Dom已经完成更新。要注意的是避免在此期间更新数据,因为这个可能导致无限循环的更新,该钩子在服务器渲染期间不能被调用。

d. 销毁

  • beforeDestroy: 实例销毁之前调用。在这一步,实例仍然完全可用。我们可以在这时进行善后收尾工作,比如清除定时器。
  • destroyed: Vue实例销毁后调用。调用后,Vue实例指示的东西都会解绑,所有的事件监听器会被移除,该钩子在服务器端渲染不可被调用。

image.png

2. v-if 和 v-show 的区别

  • v-if: 在编译过程中会被转换为三元表达式,条件不满足时不渲染此节点。元素销毁和重建控制显示还是隐藏。适用于在运行时很少改变条件,不需要频繁切换条件的场景。
  • v-show: 会编译为指令,条件不满足时控制样式将此节点隐藏(display:none),css样式控制。适用于需要非常频繁切换条件的场景。

3. display:none、visibility:hidden、opacity:() 之间的区别?

  • 共同点:隐藏
  • 不同点:
是否占据空间子元素是否继承事件绑定过渡动画
display:none隐藏后不占位置不会被子元素继承无法触发他绑定的事件transition对其无效
visivbility:hidden隐藏后依然占据会被子元素继承,通过设置子元素visibility:visible来显示无法触发他绑定的事件transition对其无效
opacity:0隐藏后依然占据会被子元素继承但是不能设置子元素opacity:0来重新显示绑定的事件可以触发transition对其有效

4. Vue内置指令

  • v-once: 定义它的元素或组件只渲染一次,包括元素或组件的所有节点。首次渲染后,不再随数据的变化重新渲染,将被视为静态内容。
  • v-cloak: 这个指令保持在元素上直到关联实例结束编译。
  • v-bind: 绑定属性,动态更新 HTML 元素上的属性。例如 v-bind:class。
  • v-on: 用于监听DOM事件。例如v-on:click,v-on:keyup
  • v-html: 赋值就是变量的innerHTML(注意防止xss攻击)
  • v-text: 更新元素的textContent
  • v-model: 在普通标签上,变成value和input的语法糖,并且会处理拼音输入法的问题。在组件上,也是处理value和input的语法糖。
  • v-if、v-else、v-else-if: 可以配合template使用,在render函数里面就是三元表达式。
  • v-show: 使用指令来实现,最终会通过display来进行显示隐藏。
  • v-for: 优先级比v-if高,最好不要一起使用,尽量使用计算属性去解决。注意增加唯一key值,不要使用index作为key。
  • v-pre: 跳过这个元素以及子元素的编译过程,以此来加快整个项目的编译速度。

5. computed 和 watch 的区别和运用的场景

  • computed: 是计算属性,依赖其他属性计算值,并且computed的值有缓存,只有当计算值变化才会返回内容,他可以设置 getter 和 setter。一般用在模板渲染中,某个值是依赖其它响应对象甚至是计算属性而来。
  • watch: 监听到值的变化就会执行回调,在回调中可以进行一系列的操作。适用于观测某个值的变化去完成一段复杂的业务逻辑。

6. Vue2.0响应式数据的原理

7. Vue如何检测数组变化