🗒️Vue
介绍下 Vue
Vue.js 是一个前端框架,用来构建交互式的单页应用。
它用了 MVVM 架构:
- M,Model,模型,对应代码里的数据对象 
- V,View,视图,对应 Vue 模板。我们可以在模板中使用文本插值 - {{ msg }}、各种指令- v-、模板引用- ref,这种声明式的渲染模型帮我们抽象了对 DOM 的直接操作
- VM,ViewModel,视图模型,对应 Vue 的响应式数据绑定。Vue.js 通过使用双向数据绑定来实现数据与视图间的同步。这意味着当数据发生变化时,视图会自动更新,反之亦然。这大大简化了开发过程,无需手动操作 DOM 元素。 
此外:
- Vue 实现了自己的组件模型,让代码更加模块化,易于理解和维护。也可以嵌套组件,形成组件树 - 全局注册和局部注册、同步组件和异步组件 
- 生命周期钩子:允许开发者在组件的不同生命周期阶段执行自定义逻辑 
- 组件通信 
 
- Vue Router 实现了单页应用的导航和路由管理,能将不同的组件与 URL 路径相关联 
- 状态管理:Vuex 库 → Pinia 库、RxJS 库,用来管理应用程序的状态 
此外:
- 使用 Vue CLI 来快速搭建 Vue.js 项目 
- 丰富的第三方插件和库 
- 文档齐全、社区活跃 
关于 Vue 指令:
- Vue.js 提供了一些指令,用来处理 DOM 元素。比如 - v-bind用于绑定属性,- v-model用于实现表单元素与数据的双向绑定
- v-if用于条件渲染、- v-for用于循环渲染
- v-on指令来监听 DOM 元素上事件并触发一个函数
 
- 一个指令的任务:是在其表达式的值变化时,响应式地更新 DOM 
响应式数据绑定
Vue 的响应式数据绑定是基于数据的 getter 和 setter 机制,以及虚拟 DOM 的比较和局部更新。
- 侦听属性:Vue 在组件实例化时会递归遍历数据对象 data,将每个属性转化为 getter 和 setter。这意味着当访问一个属性时,Vue 会记录该属性的依赖关系,并为属性的变化设置一个监听器。 - 依赖追踪:在模板中,当一个属性被用于渲染视图时,Vue 会建立一个依赖关系。这意味着模板中的元素依赖于数据属性,当属性发生变化时,Vue 知道哪些视图需要被更新。 
- 派发更新:当数据属性发生变化时,setter 会被触发。这时,Vue 会通知依赖于该属性的视图进行更新。Vue 会进行批处理以提高性能,确保只在合适的时候进行DOM更新,而不是立即更新。 
 
- 虚拟 DOM:差异比较、批量异步更新、局部更新 - 虚拟 DOM 的差异比较:Vue 会将虚拟 DOM 与之前的虚拟 DOM 进行比较,找出实际变化的部分(目的是为了减少 DOM 操作的数量,提高性能) 
- 批量异步更新:在数据发生变化后,Vue 不会立即执行 DOM 更新操作,而是将其放入事件队列中,等到下一个事件循环时才进行更新。这允许 Vue 在同一事件循环内收集多个数据变化,并批量处理它们,以进一步提高性能 
- 局部更新:根据虚拟 DOM 的差异,Vue 只更新实际变化的DOM元素,而不是整个页面。这使得更新过程更加高效。 
- 跨平台兼容性:虚拟 DOM 不仅可以在浏览器中使用,还可以在其他环境中使用,例如服务器端渲染(SSR)。这为构建通用应用程序提供了便利。 
 
- 反应式循环:如果在更新过程中数据再次改变,Vue 会再次触发更新过程,以确保视图与数据保持同步,直到不再有更新发生 
DOM 的更新并不是同步的,Vue 会缓冲它们直到更新周期的“下个时机”,以确保无论我们进行了多少次声明更改,每个组件都只需要更新一次。全局 API
nextTick()可确保等待一个状态改变后的 DOM 更新完成。
组件间的通信方式
- 直接父子组件 - props:单向数据流,只能从父到子 
- 自定义事件:子通过 - $emit()触发自定义事件,父来监听(只能直接子,没有冒泡)
- 透传 attributes(从父到子,一层一层) 
 
- 若要在兄弟组件或跨越多层嵌套的组件间通信 - EventBus:是一个空的 Vue 实例,用来在任意两个组件之间进行通信 - $on,- $emit
- 全局状态管理:Vuex 库 → Pinia 库 - 每个 Vue 组件实例都在“管理”它自己的响应式状态了:State, Actions, View 
- 当有多个组件共享一个共同的状态时 
 
- 依赖注入(可跨多层):上层组件提供 - provide(),下层组件获取- inject()
 
补充:若要在有多个组件共享一个共同的状态,其它可选的办法:
props 层层传下来:将共享状态“提升”到共同的祖先组件上去,再通过 props 传递下来
用响应式 API 做简单状态管理(手动):抽取出组件间的共享状态,放在一个全局单例中来管理
其它:
- Suspense API 
Vue 中的设计原则和设计模式
以下仅供参考:
- 开发人员会用到的 - 生命周期钩子函数,模板方法 
- computed 属性,代理模式 
- 事件,发布-订阅:引入一个中介者(event bus)来协调生产者和消费者之间的通信 
- Veux 状态管理模式,单例模式:全局 Store 来存储应用的所有状态 
- 组件的依赖注入,依赖注入模式 
 
- Vue 本身的 - 组件嵌套的结构,组合模式 
- 响应式数据绑定,观察者模式:通过 getter 方法收集依赖,通过 setter 方法派发 
- 插件机制,适配器模式 
- mixins,装饰器模式 
 
Last updated