zoukankan      html  css  js  c++  java
  • 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毛买辣条行不行,所以如果你心情还比较高兴,也是可以扫码打赏博主(っ•̀ω•́)っ✎⁾⁾!

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

    支付宝
    微信
    本文版权归作者所有,欢迎转载,未经作者同意须保留此段声明,在文章页面明显位置给出原文连接
    如果文中有什么错误,欢迎指出。以免更多的人被误导。
  • 相关阅读:
    Android 进程生命周期 Process Lifecycle
    .NET Core微服务之基于IdentityServer建立授权与验证服务(续)
    .NET Core微服务之基于IdentityServer建立授权与验证服务
    .NET Core微服务之基于Ocelot实现API网关服务(续)
    .NET Core微服务之基于Ocelot实现API网关服务
    .NET Core微服务之基于Polly+AspectCore实现熔断与降级机制
    .NET Core微服务之基于Consul实现服务治理(续)
    .NET Core微服务之基于Consul实现服务治理
    一朝入梦,终生不醒:再看红楼梦,也谈石头记
    月光下的凤尾竹—彩云之南西双版纳游记
  • 原文地址:https://www.cnblogs.com/IwishIcould/p/14916910.html
Copyright © 2011-2022 走看看