• Vue3中ref和toRef的区别


    1. ref是复制,视图会更新

    如果利用ref将某一个对象中的某一个属性值变成响应式数据
    我们修改响应式数据是不会影响原始数据的;
    同时视图会跟新。
    ref就是复制 复制是不会影响原始数据的
    
    <template>
     <div>
        <div>
          <div>{{stateObj}}</div>
           <button @click="func1">按钮</button>
        </div>
     </div>
    </template>
    <script>
    import {ref} from 'vue'
    export default {
      name: 'App',
      setup(){
        let obj={name:"张三",age:22}
        
        //将对象中的某一个属性
        //变成响应式数据
        //而不是将对象变成响应式数据
        let stateObj=ref(obj.name)
        function func1(){
          stateObj.value="张三变成李四";
          //原始数据没有发生改变 原始数据obj {name: "张三", age: 22}
          console.log("原始数据obj",obj)
    
          //响应式数据发生改变了  
          /**
          响应式stateObj RefImpl {
              _rawValue: "张三变成李四", _shallow: false,
              __v_isRef: true, _value: "张三变成李四"
          }
          **/
          //变成了一个ref的对象
          console.log("响应式stateObj",stateObj)
    
        }
    
        return {stateObj,func1}
    },
    }
    </script>
    

    2.toRef是引用,视图不跟新

    如果利用toRef将某一个对象中的属性变成了响应式的数据
    我们修改响应式的数据是会影响原始数据的
    如果数据是通过toRef创建的,修改值后,数据不会触发视图
    
    toRef是引用;它引用的是以前那个对象中的属性
    所以你修改后,会影响到原始数据终中的值
    
    <template>
     <div>
        <div>
          <div>{{state}}</div>
           <button @click="func1">按钮</button>
        </div>
     </div>
    </template>
    <script>
    import {toRef} from 'vue'
    export default {
      name: 'App',
      setup(){
        let obj={name:"张三",age:22}
        //将对象中的某一个属性name变成响应式数据
        //而不是将对象变成响应式数据
        let state=toRef(obj, 'name');
        console.log('toRef',state)
        function func1(){
          state.value="我是李四";
          console.log('obj',obj)
          console.log('state',state)
        }
        return {state,func1}
      },
    }
    </script>
    

    3.结论

    ref复制, 修改响应式数据,不会影响以前的数据,界面会更改。
    toRef引用, 修改响应式的数据,会影响以前的数据,界面不会更新。
    
    toRef的使用场景
    如果想让响应式数据和原始数据关联起来。
    并且更新响应式数据后,不想视图更新;那么就可以使用toRef
    
    作者:明月人倚楼
    出处:https://www.cnblogs.com/IwishIcould/

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

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

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

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

    支付宝
    微信
    本文版权归作者所有,欢迎转载,未经作者同意须保留此段声明,在文章页面明显位置给出原文连接
    如果文中有什么错误,欢迎指出。以免更多的人被误导。
  • 相关阅读:
    向工信部投诉中国联通、移动、电信等运营服务商的权威途径
    如何把本机Sql Sever数据库转移到虚拟主机sql数据库
    SQL Server 2005如何远程连接数据库?
    mssql server 2005还原数据库bak文件与“备份集中的数据库备份与现有的xx数据库不同”解决方法
    傲游5里保存的网址,在傲游4不能同步?外加几句吐槽
    mysql数据库基础的简单操作指南
    MVC框架模式技术实例(用到隐藏帧、json、仿Ajax、Dom4j、jstl、el等)
    Web---JSTL(Java标准标签库)-Core核心标签库、I18N国际化、函数库
    Jupyter Notebook导入自定义模块时ImportError
    Pandas数据处理(2): 数据透视表,行转列、列转行、以及一行生成多行
  • 原文地址:https://www.cnblogs.com/IwishIcould/p/14916910.html
Copyright © 2020-2023  润新知