龙空技术网

vue3的ref、reactive、toRefs特性详解

爱分享的程序员521 366

前言:

现在各位老铁们对“jsref”大致比较珍视,大家都需要学习一些“jsref”的相关资讯。那么小编也在网摘上搜集了一些对于“jsref””的相关文章,希望我们能喜欢,姐妹们一起来学习一下吧!

了解ref()、reactive()这两个特性之前,我们先回顾一下vue2中data和method方法。在vue2中我们定义一个响应式变量name,通过点击事件handle来改变name的值是通过如下方式写的。这样只要name改变则界面相应的会发生改变,这就是数据的双向绑定。

<template>    {{name}} <template><script>  export default {    data() {      return {        name:''      }    },    methods: {      handle(val) {        this.name = val      }    }  }</script>

那么在vue3.0中,我们怎么定义响应式变量呢?我们下面对ref()、reactive()、toRefs()这三个方法进行讲解。

1、ref() 函数

ref() 函数用来根据给定的值创建一个响应式的数据对象,传入的为基本数据类型,例如字符串、数字、boolean 等,返回值是一个对象,这个对象上只包含一个 value 属性, 只在setup函数内部访问ref函数需要加.value

<script lang="ts">import { defineComponent, ref } from 'vue';export default defineComponent({    setup() {      const name = ref<string>('张三')      // 在js 中获取ref 中定义的值, 需要通过value属性     console.log(name.value);      // 同时定义的响应变量比如return出去,不然界面不会生效,      // 就像vue2中data里面的值需要return一个道理      return {          name      }    }});</script>
2、reactive() 函数

reactive函数传入的为引用类型,例如数组、对象等,但不能代理基本类型值,返回一个响应式的数据对象, 想要使用创建的响应式数据也很简单,创建出来之后,在setup中return出去,直接在template中调用即可。

<template>    {{state.name}}<template><script lang="ts">import { defineComponent, reactive, ref, toRefs } from 'vue';export default defineComponent({    setup(props, context) {      let state = reactive({        name: 'test'      });      return {        state      }    }});</script>
3、toRefs() 函数

toRefs() 函数可以将 reactive() 创建出来的响应式对象,转换为普通的对象,类似使用拓展用算符...的方法返回数据data,使用方法如下

<template>   // 加了toRefs使用和reactive()函数区别在于可以直接使用name属性    {{name}}<template><script lang="ts">import { defineComponent, reactive, ref, toRefs } from 'vue';export default defineComponent({    setup(props, context) {      let state = reactive({        name: 'test'      });      return {        // 关键点在这里        toRefs(state)      }    }});</script>

标签: #jsref