zoukankan      html  css  js  c++  java
  • vue(33)vue中CompositionAPI中setup响应式变量的声明

    1.在setup中普通声明的变量,并返回时该变量不是响应式的,即改变该变量的值不会刷新页面。

    <template>
      <div class="home">
        {{num}}
        <br>
        <button @click="add()">change</button>//这里点击的时候在方法中即使改变了num的值,页面上还是num的初始值,因为它不是响应式的
      </div>
    </template>

    <script>
    export default {
      setup() {
        let num = 0;
        function add(){
          num++;
          console.log(num);
        }
        return { num ,add};
      },
    };
    </script>
     
    2.使用ref()可以声明响应式的变量
    <template>
      <div class="home">
        {{num}}//在这里用num的值时不用写num.value
        <br>
        <button @click="add()">change</button>
      </div>
    </template>

    <script>
    import{ref}from 'vue'
    export default {
      setup() {
        let num = ref(0);//这里num就是一个响应式的变量了
        function add(){
          num.value++;//用ref声明后在setup中访问或者改变num的值时要用num.value。但是在template中使用时直接可以使用num
          console.log(num.value);
        }
        return { num ,add};
      },
    };
    </script>
     
    3.ref()不能声明响应式的对象,要声明响应式的对象用reactive()
    <template>
      <div class="home">
        {{user.age}}
        <br>
        <button @click="add()">change</button>
      </div>
    </template>

    <script>
    import{ref,reactive}from 'vue'
    export default {
      setup() {
        let user = reactive({
          name:'tom',
          age:0
        });
        function add(){
          user.age++;//使用reactive声明响应式对象后不用像ref那样用.value来访问或者修改,直接像正常变量那样使用就可以
          console.log(user.age);
        }
        return { user ,add};
      },
    };
    </script>
     
    4.使用readonly将响应式变量变为只读的,这样就可以将一个响应式变量变为非响应式不可更改的变量
    <template>
      <div class="home">
        {{u.age}}
        <br>
        <button @click="add()">change</button>
      </div>
    </template>

    <script>
    import{ref,reactive,readonly}from 'vue'
    export default {
      setup() {
        let user = reactive({
          name:'tom',
          age:0
        });
        let u = readonly(user);
        function add(){
          u.age++;
          console.log(u.age);
        }
        return { u ,add};
      },
    };
    </script>
     
    5.解构返回reactive声明的对象中的属性时,该属性不是响应式的
    <template>
      <div class="home">
        {{age}}
        <br>
        <button @click="add()">change</button>
      </div>
    </template>

    <script>
    import{ref,reactive,readonly}from 'vue'
    export default {
      setup() {
        let user = reactive({
          name:'tom',
          age:0
        });
        function add(){
          user.age++;
          console.log(user.age);
        }
        return { ...user ,add};//...user表示解构返回user对象中的没个属性,这里表示返回一个name和age变量,但这样返回后name和age不是响应式的
      },
    };
    </script>
     
    6.为了解决5所示的问题,可以使用toRefs来将一个reactive声明的对象的属性解构为响应式的变量返回
    <template>
      <div class="home">
        {{age}}
        <br>
        <button @click="add()">change</button>
      </div>
    </template>

    <script>
    import{ref,reactive,readonly,toRefs}from 'vue'
    export default {
      setup() {
        let user = reactive({
          name:'tom',
          age:0
        });
        function add(){
          user.age++;
          console.log(user.age);
        }
        return { ...toRefs(user) ,add};//使用toRefs后返回name和age变量就是响应式的了
      },
    };
    </script>
  • 相关阅读:
    Kafka项目实战-用户日志上报实时统计之编码实践
    MapReduce-深度剖析
    Word 页码设置教程:如何删除封面和目录的目录?
    Pytorch autograd,backward详解
    Pytorch Sampler详解
    Pytorch并行计算:nn.parallel.replicate, scatter, gather, parallel_apply
    论文笔记系列-Auto-DeepLab:Hierarchical Neural Architecture Search for Semantic Image Segmentation
    Pytorch: parameters(),children(),modules(),named_*区别
    Broadcast,Scatter,Gather,Reduce,All-reduce分别是什么?
    如何理解正定矩阵和半正定矩阵
  • 原文地址:https://www.cnblogs.com/maycpou/p/14998212.html
Copyright © 2011-2022 走看看