vue3 reactive函数用法

news/2024/7/9 23:54:35 标签: vue

reactive的用法与ref的用法相似,也是将数据变成响应式数据,当数据发生变化时UI也会自动更新。不同的是ref用于基本数据类型,而reactive是用于复杂数据类型,比如对象和数组
例如:定义一个对象类型的变量user

<template>
  <div>
    <p>{{ user }}</p>
    <button @click="increase">click me! one year later</button>
  </div>
</template>
 
<script>
import { reactive } from "vue";
export default {
  name: "reactive",
  setup() {
    const user = reactive({ name: "Alice", age: 12 });
    function increase() {
      ++user.age
    }
    return { user, increase };
  },
};
</script>

如上,当点击按钮时,让数据user.age加1,当Vue发现数据发生变化,UI会自动更新
那我们验证了,确实reactive函数可以将一个复杂数据类型变成响应式数据。我们不妨将reactive函数执行的结果打印出来看下,看看它返回值是什么
reactive将传递的对象包装成了proxy对象

我们发现,reactive执行结果是将传递的对象包装成了proxy对象
接下来我们测试一下,如果传递基本数据类型呢?

<template>
  <div>
    <p>{{ userAge }}</p>
    <button @click="increase">click me! one year later</button>
  </div>
</template>
 
<script>
import { reactive } from "vue";
export default {
  name: "reactive",
  setup() {
    let userAge = reactive(12);
    function increase() {
      console.log(userAge);
      ++userAge;
    }
    return { userAge, increase };
  },
};
</script>

运行发现,基本数据传递给reactive,reactive并不会将它包装成porxy对象,并且当数据变化时,界面也不会变化

需要注意的是,reactive中传递的参数必须是json对象或者数组,如果传递了其他对象(比如new Date()),在默认情况下修改对象,界面不会自动更新,如果也需要具有响应式,可以通过重新赋值的方式实现

使用ref函数可以处理基本数据,使期变成响应式数据
 


http://www.niftyadmin.cn/n/951520.html

相关文章

Vue Function-based API RFC

转载尤大大的文章&#xff1a;https://zhuanlan.zhihu.com/p/68477600 2020 年一月又注&#xff1a;RFC 已经被完全重写&#xff0c;最新版本请以 https://composition-api.vuejs.org/ 为准。以下内容会有部分与最新的 API 有出入&#xff0c;但依然可以帮助理解。 --- 译注…

[import ... from」、「 import ... = require()」 和 「import(path: string)」有什么区别?

1、import ... from2、import(path: string)3、import ... require() 前两个都是ES6的模块语法&#xff0c;第3个import ... require() 是ts的语法 使用export命令定义了模块的对外接口以后&#xff0c;其他 JS 文件就可以通过import命令加载这个模块 第1个&#xff1a;im…

TS之类型断言

类型断言用于手动指定一个值的类型。 一、语法 值 as 类型 二、用途 2.1 将一个联合类型断言为其中一个类型 interface Cat {name:string;run():void; } interface Fish {name:string;swim():void; } function getName(animal:Cat|Fish):string{return animal.name; } 只…

vue props和attrs

vue3 props 要先声明才能取值&#xff0c;attrs不用声明直接使用&#xff08;$attrs 包含 class and style attribute&#xff09;props 不包含事件&#xff0c;attrs包含 props 支持 String 以外的类型&#xff0c;attrs只有 String 类型 props 没有声明的属性&#xff0c;会…

vue3 setup使用(详细)

官网vue3-setup 总结&#xff1a; 1、setup 函数时&#xff0c;它将接受两个参数&#xff1a;&#xff08;props、context(包含attrs、slots、emit)&#xff09; 2、setup函数是处于 生命周期函数 beforeCreate 和 Created 两个钩子函数之前的函数 3、执行 setup 时&#x…

vue3 computed和watch

学习笔记记录&#xff08;内容来源于官网&#xff09; computed vue3 计算属性和vue2变化不大&#xff0c;只需要注意&#xff0c;它返回的是一个响应式的ref对象,所以在使用的时候需要.value(模板中使用不需要&#xff0c;会自动展开) const count ref(1) const plusOne …

watch和watchEffect

学习笔记记录&#xff08;内容来源于官网&#xff09; watch vue3watch用法和vue变化也不是特别大&#xff0c;vue3支持侦听多个数据源 用法没太大变化&#xff1a;wach是一个钩子函数&#xff0c;支持传入三个参数&#xff08;个人理解&#xff09; 1、监听对象 2、回调函…

TS学习笔记(十):命名空间

在确保我们创建的变量不会泄露至全局变量中&#xff0c;我们以前曾采用过这种代码组织形式&#xff1a; (function(someObj){someObj.age 18;})(someObj || someObj {});复制代码但在基于文件模块的项目中&#xff0c;我们无须担心这一点&#xff0c;此种方式&#xff0c;适合…