返回
Vue 3.0 创建项目与 API 讲解(三)
前端
2024-02-04 12:12:47
## Vue 3.0 的响应式系统
Vue 3.0 的响应式系统基于 Proxy 对象,它允许您以更简单的方式跟踪和更新数据。当您在 Vue 实例中声明一个响应式变量时,Vue 将创建一个代理对象来包装原始值。这个代理对象会监听原始值的任何更改,并在更改发生时通知 Vue 实例。
## Vue 3.0 的计算属性
计算属性是一种特殊类型的响应式变量,它允许您根据其他响应式变量的值计算出一个新的值。计算属性不会存储自己的值,而是每次被访问时重新计算。这使得它们非常适合用于计算不经常变化的值,例如一个对象的长度或总和。
## Vue 3.0 的生命周期
Vue 3.0 的生命周期是指 Vue 实例从创建到销毁所经历的各个阶段。生命周期钩子是特殊的方法,它们会在生命周期的不同阶段被调用。这允许您在适当的时候执行特定的操作,例如在实例创建时加载数据或在实例销毁时清除资源。
## 自定义 ref
const track = () => {}
const trigger = () => {}
const ref = customRef((track, trigger) => {
return {
get() {
track()
return value
},
set(newValue) {
if (newValue !== value) {
value = newValue
trigger()
}
}
}
})
上例中,我们定义了一个名为 `ref` 的函数,它接受两个参数:`track` 和 `trigger`。这两个参数都是函数,它们分别用于跟踪依赖和触发响应。
在 `ref` 函数内部,我们定义了一个对象,这个对象具有 `get` 和 `set` 属性。`get` 属性用于获取值的当前值,`set` 属性用于设置值的新值。
当我们调用 `ref` 函数时,它会返回一个对象,这个对象具有 `get` 和 `set` 属性。我们可以使用这个对象来访问和更新值的当前值。
## 标记一个对象为“永远不会转为响应式代理”
const obj = markRaw({ foo: 'bar' })
上例中,我们使用 `markRaw` 函数将一个对象标记为“永远不会转为响应式代理”。这意味着这个对象永远不会被 Vue 转换为响应式代理,因此它的值永远不会被跟踪或更新。
## 仅为某一个属性创建响应式代理
const obj = { foo: 'bar' }
const reactiveFoo = shallowRef(obj.foo)
上例中,我们使用 `shallowRef` 函数为对象的 `foo` 属性创建了一个响应式代理。这意味着只有 `foo` 属性的值会被跟踪和更新,而对象的其余属性的值不会被跟踪或更新。
## 总结
本文重点介绍了 Vue 3.0 中如何自定义 ref、怎样显式标记一个对象为“永远不会转为响应式代理”,以及如何仅为某一个属性创建响应式代理,同时还对 Vue 3.0 的响应式系统、计算属性和生命周期进行了详细的讲解,辅以丰富的代码示例,帮助读者更好地理解和使用 Vue 3.0 的各种特性。