vue3中toRef和toRefs的情况(系列九)

时间:2021-03-06 14:15:25   收藏:0   阅读:0
 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>

 

 

评论(0
© 2014 mamicode.com 版权所有 京ICP备13008772号-2  联系我们:gaon5@hotmail.com
迷上了代码!