1. watch与watchEffect的区别
- watch是惰性执行,只有监听的值发生变化的时候才会执行,但是watchEffect每次代码加载都会执行。
- watch需要传递监听的对象,watchEffect不需要。
- watch只能监听响应式数据:ref定义的属性和reactive定义的对象,如果直接监听reactive定义对象中的属性是不允许的,除非使用函数转换一下。watchEffect如果监听reactive定义的对象是不起作用的,只能监听对象中的属性。
- watch需要明确监听哪个属性,watchEffect会根据其中的属性,自动监听其变化。
- watcheffect初始化时,一定会执行一次(收集要监听的数据,不然不知道监听的是什么),watch只有你设置了初始化监听才会监听(immediate: true,)。
2.pinia和vuex的区别
1.pinia没有mutations,只有state,getters,actions
2.pinia分模块不需要modules (之前vuex分模块需要modules)
3.pinia体积更小(性能更好)
4.pinia可以直接修改state数据
3. 在vue组件中,data为什么是一个返回对象的函数?
如果data是对象的话,由于对象是引用类型,组件被复用的话,就会创建多个实例。本质上,这些实例用的都是同一个构造函数。这样就会影响到所有的实例,所以为了保证组件不同的实例之间data不冲突,data必须是一个函数。
4、key的作用
1、主要是为了高效的更新虛拟DOM,其原理是vue在patch(补丁)过程中通过key可以精准判断两个节点是否是同一个,从而避免频繁更新不同元素,使得整个patch过程更加高效,减少DOM操作量,提高性能。
2、 另外,若不设置key还可能在列表更新时引发一些隐蔽的bug。如某行数据不该更新的却更新了。
3、vue中在使用相同标签名元素的过渡切换时,也会使用到key属性,其目的也是为了让vue可以区分它们,否则vue只会替换其内部属性而不会触发过渡效果
-或者--------------------------------------------------------------------------------------
1- 唯一标识
2.因为虚拟 dom 有一个 diff 算法,key 是唯一的,不会让数据产生混乱,可以高效更新的虚拟dom
不建议使用索引作为 key,可以使用唯一 id 作为 key
原因:如果在一个数组中插入某一个值,vue 识别后会从新分配后续索引,速度变慢, 当
删除一条数据时,他的索引也会发生变化,会让数据产生混乱
5.vue3. 中pinia有哪些核心属性以及在组件中的使用
pinia是Vue3中的状态管理库,具有以下核心属性:
$state:一个ref对象,用于存储状态数据。
$getters:一个包含所有状态的getter函数的对象。
$actions:一个包含所有操作状态的action函数的对象。
在组件中使用pinia,需要通过useStore方法来获取一个与组件相关联的状态管理对象。