WIP: Composition API——Ref和Reactive

Vue3中的Composition API Ref和Reactive

  • Composition API

    • Vue3最大的特点在于引入了Composition API,而Composition API中的Ref和Reactive允许我们创建响应式数据。
  • Vue2中的响应式

    • 如果想要在Vue2中创建响应式数据,那么需要在data函数中返回的对象中声明这个数据。

      <template>
        <h1>{{ title }}</h1>
      </template>
      <script>
        export default {
          data: () => {
            return{
              title: 'title'
            };
          },
        };
      </script>
      

      如果不在data函数中返回的对象中声明这个数据,那么这个数据将不是响应式的。(需要经过Vue.$set()将不在data中声明的数据转化为响应式数据)。

  • Vue3中的响应式

    • 在Vue3中我们可以使用ref或reactive来创建响应式数据。

      <template>
        <h1>{{ title }}</h1>
      </template>
      <script>
        import {ref} from 'vue';
        export default {
          setup(){
            const title = ref('Hello, Vue3.');
            
            setTimeout(() => {
              title.value = 'New Title';
            },5000);
            return {
              title
            };
          },
        }
      </script>
      
  • Ref

    • 如果需要创建原始数据类型的响应式数据,那么推荐使用ref()。

      import {ref} from 'vue';
      
      export default{
        setup(){
          const title = ref("");
          const one = ref(1);
          const isValid = ref(true);
          const foo = ref(null)
        }
      }
      
    • 我们使用ref()来实现上面Vue2中的响应式内容

      <template>
        <title>{{ title }}</title>
      </template>
      <script>
        import {ref} from 'vue';
        
        export default {
          setup(){
            const title = ref('title');
            
            setTimeout(() => {
              title.value = 'new title';
            },5000);
            
            return {title};
          }
        }
      </script>
      

      ref()函数接收一个内部值,并返回一个响应式的ref对象。ref对象具有一个属性value,这个value属性指向内部值。

      如果想要访问或改变值,那么需要使用title.value

  • Ref拆箱

    • 在上面的例子中,可以看到在模板中我们不需要使用ref对象的value属性就可以访问到ref对象的内部值。
      • 当ref作为渲染上下文(也就是从setup()返回的对象)的属性返回并在模板中访问,那么它会自动展开为内部值,所以在模板中访问ref对象的内部值不需要引用ref对象的value属性。
  • Reactive

    • reactive()适合于创建响应式引用类型。

      <template>
        <title>{{ data.title }}</title>
      </template>
      
      <script>
        export default {
          setup(){
            const data = reactive({
              title: 'title',
            })
            return {
              data
            };
          }
        }
      </script>
      

      因为reactive()函数返回的是一个响应式的对象,当我们想要在模板中访问这个对象的中的属性的时候,需要使用data.title才可以访问或更改。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值