双向数据绑定原理

Vue 借助Object.defineProperty()方法,对数据对象的每个属性的setter(设置值时触发)和getter(获取值时触发)进行拦截。当数据发生改变时,会通知订阅者Watcher,进而触发相关更新函数,让视图随之更新;而当视图发生变化时,也会反向更新数据,从而实现数据和视图的双向联动。

生命周期

Vue 实例从创建到最终销毁的整个过程就是它的生命周期,期间会经历多个阶段,每个阶段都有对应的钩子函数,开发者可以在这些钩子函数中编写特定逻辑:

  • 创建前(beforeCreate):此时 Vue 实例刚刚初始化,还不能访问到数据和方法。
  • 创建后(created):实例创建完成,能访问到数据和方法,但还没开始挂载到 DOM 上。
  • 挂载前(beforeMount):即将把模板渲染成真实 DOM,但还未挂载到页面。
  • 挂载后(mounted):模板已成功挂载到页面,可进行 DOM 操作。
  • 更新前(beforeUpdate):数据发生变化,视图还未更新。
  • 更新后(updated):数据变化后,视图也已完成更新。
  • 销毁前(beforeDestroy):实例即将销毁,还能正常使用。
  • 销毁后(destroyed):实例已销毁,相关资源会被清理。

组件间通信方式

  • **props 和\(emit**:用于父子组件间通信,父组件通过`props`向子组件传递数据,子组件通过`\)emit` 向父组件触发事件并传递数据。
  • \(parent和\)children:可获取当前组件的父组件和子组件实例,进而进行通信。
  • \(attrs和\)listeners:适用于跨层级组件通信,能传递父组件的属性和事件监听。
  • eventBus:创建一个事件总线(通常是一个空的 Vue 实例),需要通信的组件通过它来触发和监听事件,实现组件间的消息传递。
  • Vuex:在大型单页应用中,用于管理全局状态,让不同组件可以共享数据。

更多推荐