• 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>
  • 相关阅读:
    Eclipse启动不了
    第三章Hibernate关联映射
    System Generator简介
    Chipscope使用
    总线及数据传输技术【待完善】
    多相滤波器
    notepad++与ISE/Vivado关联
    常用IP核
    〖Linux〗Qt+gsoap开发客户端程序,服务端地址设定的字符串转换处理
    〖Android〗OK6410a的Android HAL层代码编写笔记
  • 原文地址:https://www.cnblogs.com/fsg6/p/14485509.html
Copyright © 2020-2023  润新知