1.什么是ref?
1.ref和reactive-样
也是用来实现响应式数据的方法
由于reactive必须传递一个对象,
所以导致在企业开发中如果我们只想让某个变量实现响应式的时候会非常麻烦
所以Vue3就给我们提供了ref方法,实现对简单值的监听
2.ref本质:
ref底层的本质其实还是reactive
系统会自动根据我们给ref传入的值将它转换成
ref(xx) -> reactive({value:xx})
3.ref注意点:
在Vue的html中使用ref的值不用通过value获取
在JS中使用ref的值必须通过value获取
2.在Vue的html中使用ref的值不用通过value获取
<template>
<div>
<div>
<!--在Vue的html中使用ref的值不用通过value获取 -->
<li>{{state}}</li>
<button @click="func1">按钮</button>
</div>
</div>
</template>
<script>
import {ref} from 'vue'
export default {
name: 'App',
setup(){
let state=ref(100);
function func1(){
<!-- 在JS中使用ref的值必须通过value获取 -->
state.value=200
}
return {state ,func1}
},
}
</script>
3. ref和reactive区别:
区别一:
如果在template里使用的是ref类型的数据,那么Vue会自动帮我们添加.value
如果在template里使用的是reactive类型的数据,那么Vue不会自动帮我们添加.value
区别二:
ref函数只能够去监听简单类型的数据变化,不能够去监听,复杂类型的变化(数组、对象)
reactive函数传递的参数必须是对象(json/arr)
区别三
__v_isRef 是ref中拥有的属性
Vue底层就是根据这个来进判断是否需要在template添加.value的哈
reactive 是没有__v_isRef这个属性的,所以不会帮我们添加.value的
4.ref类型中有__v_isRef 这个属性
<template>
<div>
<div>
<li>{{state}}</li>
<button @click="func1">按钮</button>
</div>
</div>
</template>
<script>
import {ref} from 'vue'
export default {
name: 'App',
setup(){
let state=ref(100)
function func1(){
console.log( 'stateObj下的属性',state );// 有 __v_isRef 这个属性
state.value=200;
}
return {state,func1}
},
}
</script>
5. isRef,isReactive 类型判断
isRef是用来检测ref类型的,如果是返回的是true,否者返回false
isReactive是用来检测reactive类型的,如果是返回的是true,否者返回false
<template>
<div>
<div>
<li>{{state}}</li>
<button @click="func1">按钮</button>
</div>
</div>
</template>
<script>
import {ref} from 'vue'
// 引入,你也可以在上一句中直接导入
import {isRef,isReactive} from 'vue'
export default {
name: 'App',
setup(){
let state=ref(100)
function func1(){
//是否是ref类型的
console.log(isRef(state));//true
//是否是reactive类型的
console.log(isReactive(state));//false
state.value=200;
}
return {state,func1}
},
}
</script>