zoukankan      html  css  js  c++  java
  • 认真总结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>
    
    作者:明月人倚楼
    出处:https://www.cnblogs.com/IwishIcould/

    想问问题,打赏了卑微的博主,求求你备注一下的扣扣或者微信;这样我好联系你;(っ•̀ω•́)っ✎⁾⁾!

    如果觉得这篇文章对你有小小的帮助的话,记得在右下角点个“推荐”哦,或者关注博主,在此感谢!

    万水千山总是情,打赏5毛买辣条行不行,所以如果你心情还比较高兴,也是可以扫码打赏博主(っ•̀ω•́)っ✎⁾⁾!

    想问问题,打赏了卑微的博主,求求你备注一下的扣扣或者微信;这样我好联系你;(っ•̀ω•́)っ✎⁾⁾!

    支付宝
    微信
    本文版权归作者所有,欢迎转载,未经作者同意须保留此段声明,在文章页面明显位置给出原文连接
    如果文中有什么错误,欢迎指出。以免更多的人被误导。
  • 相关阅读:
    List转换为Datatable
    C# NPOI导出Excel和EPPlus导出Excel比较
    NPOI导出excel2007
    C#中的事务TransactionScope
    switch,case语句易误区
    消息队列mq总结
    一文搞定十大经典排序算法(Java实现)
    常见数据结构与算法整理总结(下)
    常见数据结构与算法整理总结(上)
    mysql开发常用技巧总结
  • 原文地址:https://www.cnblogs.com/IwishIcould/p/14876599.html
Copyright © 2011-2022 走看看