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

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

    支付宝
    微信
    本文版权归作者所有,欢迎转载,未经作者同意须保留此段声明,在文章页面明显位置给出原文连接
    如果文中有什么错误,欢迎指出。以免更多的人被误导。
  • 相关阅读:
    day 66 ORM django 简介
    day 65 HTTP协议 Web框架的原理 服务器程序和应用程序
    jQuery的事件绑定和解绑 事件委托 轮播实现 jQuery的ajax jQuery补充
    background 超链接导航栏案例 定位
    继承性和层叠性 权重 盒模型 padding(内边距) border(边框) margin 标准文档流 块级元素和行内元素
    属性选择器 伪类选择器 伪元素选择器 浮动
    css的导入方式 基础选择器 高级选择器
    03-body标签中相关标签
    Java使用内存映射实现大文件的上传
    正则表达式
  • 原文地址:https://www.cnblogs.com/IwishIcould/p/14916910.html
Copyright © 2011-2022 走看看