Vue3:响应式 API-工具函数 isRef()、unref()、toRef()、toRefs()、readonly()

 isRef()

检查某个值是否为 ref。

<script setup>
import {ref,isRef} from "vue"
let msg=ref(0)
function fn(){
    console.log(isRef(msg)) //判断是否为响应性变量  
}
< /script>

 

unref()

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

 

toRef()

基于响应式对象上的一个属性,创建一个对应的 ref。这样创建的 ref 与其源属性保持同步:改变源属性的值将更新 ref 的值,反之亦然。

const state = reactive({
  foo: 1,
  bar: 2
})

const fooRef = toRef(state, 'foo')

// 更改该 ref 会更新源属性
fooRef.value++
console.log(state.foo) // 2

// 更改源属性也会更新该 ref
state.foo++
console.log(fooRef.value) // 3

 

toRefs()

将一个响应式对象转换为一个普通对象,这个普通对象的每个属性都是指向源对象相应属性的 ref。每个单独的 ref 都是使用 toRef() 创建的。

 

import {ref,isRef,reactive,toRef,toRefs} from "vue"
let obj=reactive({x:20,y:20})

let x=toRef(obj,"x")// 隐式 let x=ref(obj.x);并且响应到obj对象去
 let obj2 = reactive({ x: 2, y: 2 });
  let x = toRef(obj, obj2);
 console.log(x);

 

readonly()

接受一个对象 (不论是响应式还是普通的) 或是一个 ref,返回一个原值的只读代理。

只读代理是深层的:对任何嵌套属性的访问都将是只读的。它的 ref 解包行为与 reactive() 相同,但解包得到的值是只读的。

import {isRef,reactive,toRef,toRefs,readonly} from "vue"
let obj=readonly({}) 

 

posted on 2022-09-22 16:26  香香鲲  阅读(246)  评论(0编辑  收藏  举报