【Vue.js】Composition API - 响应式工具

47 阅读2分钟

1. isRef()

  • isRef() 用于检查某个值是否为Ref对象引用,主要用于在ts中缩减类型范围
  • 语法:
function isRef<T>(r: Ref<T> | unknown): r is Ref<T>

2. unref()

  • unref 接收一个参数, 并按照下列方式进行执行:

    • 如果参数是 ref,则返回内部值
    • 如果参数不是ref, 返回参数本身
  • unref 是val = isRef(val) ? val.value : val 计算的一个语法糖。

3. toRef()

  • 描述

    • toRef基于响应式对象上的一个属性,创建一个对应的 ref
  • 特点

  • toRef创建的 ref 与其源属性保持同步 - toRef改变源属性的值将更新 ref 的值,反之亦然。 - 当 toRef 与组件 props 结合使用时,关于禁止对 props 做出更改的限制依然有效。尝试将新的值传递给 ref 等效于尝试直接更改 props

  • 使用场景

    • toRef 一般用来操作 reactive 中的单个属性
    • 在处理props时, 即使源属性当前不存在,toRef() 也会返回一个可用的 ref。(可以为非props和readonly对象这样的响应式对象设置意外值或默认值, 防止报错)

4. toRefs()

  • 概念描述:

    • toRefs将一个响应式对象转换为一个普通对象,这个普通对象的每个属性都是指向源对象相应属性的 ref。
  • 特点

    • toRefs创建出来的普通对象中的每个单独的 ref 都是使用 toRef() 创建的。
function toRefs<T extends object>(
  object: T
): {
  [K in keyof T]: ToRef<T[K]>
}

type ToRef = T extends Ref ? T : Ref<T>
  • 使用toRefs,消费者组件可以解构/展开返回的对象而不会失去响应性

  • 应用场景: 当从组合式函数中返回响应式对象时,toRefs 相当有用。(通常配合 reactive 使用)

  • 注意点:

    • toRefs 在调用时只会为源对象上可以枚举的属性创建 ref。如果要为可能还不存在的属性创建 ref,请改用 toRef

5. isProxy()

  • isProxy()用于检查一个对象是否是由 reactive()readonly()shallowReactive()shallowReadonly() 创建的代理

6. isReactive()

  • isReactive()检查一个对象是否是由 reactive() 或 shallowReactive() 创建的代理。

7. isReadonly()

  • isReadonly()检查一个对象是否是由 readonly() 或 shallowReadonly() 创建的代理。