zoukankan      html  css  js  c++  java
  • vue3中toRef和toRefs的情况(系列九)

     

     

     
    复制代码
     ref和toRef区别:
          ref->复制, 修改响应式数据不会影响原始数据
          toRef->引用, 修改响应式数据会影响原始数据
          ref->数据发生改变, 界面就会自动更新
          toRef->数据发生改变, 界面也不会自动更新
    
          toRef应用场景:
          如果想让响应式数据和以前的数据关联起来, 并且更新响应式数据之后还不想更新UI, 那么就可以使用toRef
    复制代码
    复制代码
      1.toRef
      创建一个ref类型数据, 并和以前的数据关联
      2.toRefs
      批量创建ref类型数据, 并和以前数据关联
      3.toRef和ref区别
      ref-创建出来的数据和以前无关(复制)
      toRef-创建出来的数据和以前的有关(引用)
      ref-数据变化会自动更新界面
      toRef-数据变化不会自动更新界面
    复制代码

    ref类型数据代码

    复制代码
    <template>
      <div>
          <p>{{state}}</p>
        <button @click="myFn">按钮</button>
      </div>
    </template>
    
    <script>
    
      import {ref} from 'vue';
    export default {
      name: 'App',
      setup() {
          let obj = {name:'lnj'};
     
          let state = ref(obj.name);
     
    
          function myFn() {
              state.value = 'zs';
              console.log(obj); //{name:'lnj'}
              console.log(state); // {name:'zs'}
          }
        return {state, myFn}
      }
    }
    </script>
    
    <style>
    
    </style>
    复制代码

    通过发现,如果利用ref将某一个对象中的属性变成响应式的数据,

    我们修改响应式的数据是不会影响到原始数据的obj !== state, 会触发页面更新
     
    通过toRef
    复制代码
    <template>
      <div>
          <p>{{state}}</p>
        <button @click="myFn">按钮</button>
      </div>
    </template>
    
    <script>
      /*
      1.toRef
      创建一个ref类型数据, 并和以前的数据关联
      2.toRefs
      批量创建ref类型数据, 并和以前数据关联
      3.toRef和ref区别
      ref-创建出来的数据和以前无关(复制)
      toRef-创建出来的数据和以前的有关(引用)
      ref-数据变化会自动更新界面
      toRef-数据变化不会自动更新界面
      * */
      import {ref, toRef} from 'vue';
    export default {
      name: 'App',
      setup() {
          let obj = {name:'lnj'};
          /*
          ref(obj.name) -> ref(lnj)
          -> reactive({value:lnj})
          * */
          // ref->复制
          // let state = ref(obj.name);
          // toRef->引用
          /*
          ref和toRef区别:
          ref->复制, 修改响应式数据不会影响以前的数据
          toRef->引用, 修改响应式数据会影响以前的数据
          ref->数据发生改变, 界面就会自动更新
          toRef->数据发生改变, 界面也不会自动更新
    
          toRef应用场景:
          如果想让响应式数据和以前的数据关联起来, 并且更新响应式数据之后还不想更新UI, 那么就可以使用toRef
          * */
          let state = toRef(obj, 'name'); 
    
          function myFn() {
              state.value = 'zs';
              /*
              结论: 如果利用ref将某一个对象中的属性变成响应式的数据
                   我们修改响应式的数据是不会影响到原始数据的obj !== state
              * */
              /*
              结论: 如果利用toRef将某一个对象中的属性变成响应式的数据
                   我们修改响应式的数据是会影响到原始数据的
                   但是如果响应式的数据是通过toRef创建的, 那么修改了数据并不会触发UI界面的更新
              * */
              console.log(obj);  //{name:'zs'}
              console.log(state);  //{name:'zs'}
          }
        return {state, myFn}
      }
    }
    </script>
    
    <style>
    
    </style>
    复制代码
    toRefs
    复制代码
    <template>
      <div>
          <p>{{state}}</p>
        <button @click="myFn">按钮</button>
      </div>
    </template>
    
    <script>
      /*
      1.toRef
      创建一个ref类型数据, 并和以前的数据关联
      2.toRefs
      批量创建ref类型数据, 并和以前数据关联
      3.toRef和ref区别
      ref-创建出来的数据和以前无关(复制)
      toRef-创建出来的数据和以前的有关(引用)
      ref-数据变化会自动更新界面
      toRef-数据变化不会自动更新界面
      * */
      import {ref, toRef, toRefs} from 'vue';
    export default {
      name: 'App',
      setup() {
          let obj = {name:'lnj', age:18};
          // let name = toRef(obj, 'name');
          // let age = toRef(obj, 'age');
          let state = toRefs(obj);
    
          function myFn() {
              // name.value = 'zs';
              // age.value = 666;
              state.name.value = 'zs';
              state.age.value = 666;
              console.log(obj); //{name:'zs', age:666}
              console.log(state);  //{name:'zs', age:666}
              // console.log(name); 
              // console.log(age);
          }
        return {state, myFn}
      }
    }
    </script>
    
    <style>
    
    </style>
    复制代码
  • 相关阅读:
    EC中的QEvent
    Host是如何与EC通信的
    Python随笔之元组
    Vuex的基本使用
    运行新项目时先在项目目录下运行下面代码,安装依赖node_modules
    前端代码编辑时要注意大小写
    vue3.0的setup函数的使用
    angular写的一个导航栏
    Java数组的工具类
    eclipse格式化代码快捷键失效
  • 原文地址:https://www.cnblogs.com/onesea/p/15684242.html
Copyright © 2011-2022 走看看