vue组件使用为什么执行2边
-
Vue组件之所以会执行两次,是因为Vue的更新机制所决定的。具体来说,这涉及到Vue响应式系统的工作原理以及组件更新的过程。
-
Vue的响应式系统
Vue采用了响应式系统来跟踪和管理数据的变化。当数据发生变化时,Vue会通过依赖追踪机制自动识别出哪些地方需要进行更新,然后重新渲染页面。这通过将数据属性转化为getter和setter来实现。 -
组件更新过程
我们知道,Vue组件是由一个个单独的实例构成的。当父组件数据发生变化时,会触发组件的重新渲染流程。
具体的更新过程如下:
- 父组件数据改变,触发组件重新渲染
- Vue会根据组件的依赖来确定重新渲染的粒度,这些依赖包括组件的props、响应式数据以及组件内部使用的其他响应式数据
- Vue会先执行组件的beforeUpdate钩子函数,此时组件的数据已经更新,但DOM尚未重新渲染
- 然后,Vue会对组件进行虚拟DOM的Diff算法操作,找出需要更新的节点
- 在进行DOM更新之前,Vue会调用组件的updated钩子函数
- 最后,根据Diff算法的计算结果,Vue会将组件的改动应用到实际的DOM上,完成页面的重新渲染
由于Vue组件的更新是通过重新渲染实现的,所以在父组件数据变化时,组件会执行两次更新过程。第一次更新是在beforeUpdate钩子函数执行前,用于计算需要更新的节点,第二次更新是在updated钩子函数执行前,用于将改动应用到DOM上。
综上所述,Vue组件执行两次的原因是为了保证组件的数据和DOM的同步,实现页面的动态渲染。虽然会带来一定的性能损耗,但通过合理使用Vue的优化技巧可以尽量减少这种影响。
2年前 -
-
Vue 组件的使用会执行两次的原因是因为 Vue 组件有两个主要的生命周期钩子函数:created 和 mounted。
-
created
在组件被创建的时候,Vue 会先执行 created 生命周期钩子函数。在 created 钩子函数中,可以进行一些初始化的工作,设置一些初始的数据或者执行一些异步的操作。这个时候,虽然组件已经被创建出来了,但是还没有被挂载到页面中,因此我们无法获取到组件在页面中的 DOM 元素。 -
mounted
在组件被挂载到页面中之后,Vue 会执行 mounted 生命周期钩子函数。在 mounted 钩子函数中,可以进行一些 DOM 操作,获取组件在页面中的 DOM 元素,或者进行一些需要在 DOM 渲染完毕之后执行的操作。这个时候,组件已经被挂载到页面中,可以获取到组件在页面中的 DOM 元素。
因此,Vue 组件的使用会执行两次的原因是在组件被创建之后会执行 created 钩子函数,然后在组件被挂载到页面之后会执行 mounted 钩子函数。这样的设计使得我们可以在不同的生命周期阶段进行不同的操作,提供了更大的灵活性和可扩展性。
另外,任何一个组件的生命周期都包括了数据初始化、事件绑定和 DOM 操作三个重要的阶段,而这三个阶段都是在组件被创建和挂载两次之间完成的。因此,执行两次的生命周期钩子函数也是为了保证组件在创建和挂载的过程中能够完成必要的操作,以便提供一个完整和可用的组件。
2年前 -
-
Vue组件在实例化时会经历两个阶段,分别是模板编译阶段和实例化阶段。模板编译阶段将模板转换为渲染函数,实例化阶段将渲染函数转换为虚拟节点,并进行渲染。
第一次执行是在模板编译阶段,Vue会编译组件的模板并将其转换为一个渲染函数。这个过程包括将模板解析为抽象语法树(AST),然后使用AST产生渲染函数。编译是一个一次性的操作,只有在组件初始化时或模板发生变化时才会进行。
在实例化阶段,Vue会调用渲染函数生成虚拟节点,并将虚拟节点渲染到真实的DOM上。当组件实例化时,会创建一个Vue实例并将其与模板关联,然后将该实例挂载到DOM上,从而完成组件的渲染。
所以,Vue组件执行两次是因为需要经历模板编译阶段和实例化阶段。第一次执行是将模板编译为渲染函数,第二次执行是将渲染函数转换为虚拟节点并进行渲染。这样的执行流程可以保证组件的模板能够正确地生成虚拟节点并进行渲染,从而实现数据的动态绑定和视图的更新。
2年前