VUE相关知识

  • Post author:
  • Post category:vue




1. data为什么最好是一个函数

为了防止多个组件实例对象公用一个

data

,采用函数的形式,在调用

initData

时会生成一个全新的

data

对象



2. Vue的生命周期

Vue2 Vue3(options) Vue3(composition)
创建前(beforeCreate) beforeCreate setup
创建完成(created) created setup
挂载前(beforeMount) beforeMount onBeforeMount
挂载完成(Mounted) Mounted onMounted
更新前(beforeUpdate) beforeUpdate onBeforeUpdate
更新(Updated) Updated onUpdated
销毁前(beforeDestroy) beforeUnmount onBeforeUnmount
销毁前(destroyed) unmounted onUnmounted
—————————- errorCaptured(在捕获了后代组件传递的错误时调用) onErrorCaptured

当组件是

KeepAlive

缓存树上的组件时还存在

onActivated


onDeactivated

(composition);


activated


deactivated

(options)两种分别表示激活或失活状态的生命周期

另外当前如果属于

SSR



onServerPrefetch

;

serverPrefetch

调用时期在


组件实例在服务器上被渲染之前要完成的异步函数

不要在

updated

钩子函数中更改组件的状态,这可能导致死循环更新

父子组件之间的生命周期关系

  • 渲染阶段:父 beforeCreate -> 父 created -> 父 beforeMount -> 子 beforeCreate -> 子 created -> 子 beforeMount -> 子 mounted -> 父 mounted
  • 更新阶段:父 beforeUpdate -> 子 beforeUpdate -> 子 updated -> 父 updated
  • 销毁阶段:父 beforeDestroy -> 子 beforeDestroy -> 子 destroyed -> 父 destroyed



v-for中 key的作用

为了更加高效的更新虚拟DOM,diff算法中比较到了

key

,如果不设置key或者元素key值重复,就会认为这是两个相同过的节点,之后重复进行更新操作,造成性能浪费



v-show 和 v-if 的区别

前者通过

display:none

来控制元素的展示或隐藏,后者直接销毁元素



v-if 和 v-for 一起使用可能产生的问题

Vue 2 中,

v-for

的优先级比

v-if

高,这意味着

v-if

将分别重复运行于每一个

v-for

循环中。如果要遍历的数组很大,而真正要展示的数据很少时,将造成很大的性能浪费。

Vue 3 中,则完全相反,

v-if

的优先级高于

v-for

,所以

v-if

执行时,它调用的变量还不存在,会导致异常。



keep-alive 是什么

他是为了实现组件缓存,保持组件的状态,避免反复渲染导致的性能问题



子组件是否可以直接改变父组件的数据

不建议这样做,因为props应该遵循单向绑定原则,如果子组件需要改变父组件的数据,可以通过 自定义事件等方式完成



版权声明:本文为qq_52773679原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。