认真总结Vue3中ref与reactive区别和isRef与isReactive 类型判断

简介: 认真总结Vue3中ref与reactive区别和isRef与isReactive 类型判断

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>
相关文章
|
6天前
|
资源调度 JavaScript 前端开发
vite+vue3+ts从0到1搭建企业级项目(2)
vite+vue3+ts从0到1搭建企业级项目
20 1
|
6天前
|
开发工具 git
vite+vue3+ts从0到1搭建企业级项目(4)
vite+vue3+ts从0到1搭建企业级项目
23 0
|
6天前
|
存储 JavaScript API
vite+vue3+ts从0到1搭建企业级项目(3)
vite+vue3+ts从0到1搭建企业级项目
19 0
|
6天前
|
资源调度 JavaScript 测试技术
vite+vue3+ts从0到1搭建企业级项目(1)
vite+vue3+ts从0到1搭建企业级项目
36 0
|
4天前
|
前端开发 JavaScript
Vue底层实现原理总结
Vue底层实现原理总结
8 0
|
8天前
|
JavaScript 前端开发 测试技术
使用 Vue CLI 脚手架生成 Vue 项目
通过 Vue CLI 创建 Vue 项目可以极大地提高开发效率。它不仅提供了一整套标准化的项目结构,还集成了常用的开发工具和配置,使得开发者可以专注于业务逻辑的实现,而不需要花费大量时间在项目配置上。
67 7
使用 Vue CLI 脚手架生成 Vue 项目
|
6天前
|
JavaScript
|
7天前
|
存储 JavaScript API
Vue状态管理深度剖析:Vuex vs Pinia —— 从原理到实践的全面对比
Vue状态管理深度剖析:Vuex vs Pinia —— 从原理到实践的全面对比
13 2
|
10天前
|
JavaScript 算法
“Error: error:0308010C:digital envelope routines::unsupported”启动vue项目遇到一个错误【已解决
“Error: error:0308010C:digital envelope routines::unsupported”启动vue项目遇到一个错误【已解决
11 1
|
10天前
|
JavaScript
error Component name “Login“ should always be multi-word vue/multi-word-component-names【已解决】
error Component name “Login“ should always be multi-word vue/multi-word-component-names【已解决】
25 1