就是ref的一些功能Api
unref
- val =isRef(val)?val.value:val 的语法糖
- 做的一个解构处理,如果参数是一个 ref 则返回它的
value
toRef
、toRefs
toRef
可以用来为一个 reactive 对象的属性创建一个 ref。这个 ref 可以被传递并且能够保持响应性。(所以你直接定义一个reactive数据不好吗- -?)toRefs
把一个响应式对象转换成普通对象,该普通对象的每个 property 都是一个 ref ,和响应式对象 property 一一对应。
区别:toRef是reactive对象中单个属性,而toRefs则是该reactive整个对象
const state = reactive({ name: 'jackie', age: 12 })
const ageRef = toRef(state, 'name') // toRef的第一个参数为该reactive对象,第二个参数为该对象中的某一属性
const state = reactive({
foo: 1,
bar: 2,
})
const stateAsRefs = toRefs(state)
/*
stateAsRefs 的类型如下:
{
foo: Ref<number>,
bar: Ref<number>
}
*/
// 也就是拿到将这整个reactive转换为ref,每条属性的响应式不会丢失
isRef
检查一个值是否为一个 ref 对象。 注:需要注意的是isRef(toRef)返回true;isRef(toRefs)返回false;检测的是一个值,而不是对象
isProxy
检查一个对象是否是由 reactive
或者 readonly
方法创建的代理。
isReactive
检查一个对象是否是由 reactive
创建的响应式代理。
如果这个代理是由 readonly
创建的,但是又被 reactive
创建的另一个代理包裹了一层,那么同样也会返回 true
。
isReadonly
检查一个对象是否是由 readonly
创建的只读代理。
例子
<template>
<Child :state="state" />
<button @click="btnClick">click</button>
<!-- {{ person.name }}---{{ person.age }} -->
{{ count.title }}
<div>{{ fruit }}</div>
</template>
<script>
import {
isRef,
reactive,
toRef,
toRefs,
isProxy,
isReactive,
isReadonly,
readonly,
ref
} from 'vue'
import Child from './Child'
export default {
components: { Child },
setup() {
// const toUnref = () => {
// alert(unref(count))
// }
// const person = ref({name:'jackie',age:12})
const state = reactive({ name: 'jackie', age: 12 })
const newState = reactive({ name: 'jackie', age: 1212 })
const stateRef = toRefs(newState)
const ageRef = toRef(state, 'name')
const count = reactive({ title: readonly('tomato') })
const fruit = readonly(ref('banana'))
console.log(isRef(stateRef), 'isRef') //false 检查一个值是否为一个 ref 对象。
console.log(isRef(ageRef), 'isRef') //true检查一个值是否为一个 ref 对象。
console.log(isProxy(state), 'isProxy') //true 检查一个对象是否是由 reactive 方法创建的代理。
console.log(isProxy(stateRef), 'isProxy') //false 检查一个对象是否是由 reactive/readonly 方法创建的代理。
console.log(isReactive(count), 'isReactive') //true 检查一个对象是否是由reactive 创建的响应式代理(readonly包裹一层也算)。
console.log(isReadonly(fruit), 'isReadonly') //false检查一个对象是否是由 reactive 创建的响应式代理。
console.log(fruit.value, 'isReadonly') //true 检查一个对象是否是由 readonly 创建的只读代理。
const btnClick = () => {
state.name = 'chen'
}
return {
state,
ageRef,
newState,
fruit,
// toUnref,
count,
btnClick
}
}
}
</script>
Comments | NOTHING