Vue3 响应式 API 及 reactive 和 ref 的用法示例详解

 更新时间:2023年06月21日 11:42:26   作者:黛琳ghz  
响应式是一种允许以声明式的方式去适应变化的编程范例,这篇文章主要介绍了关于Vue3响应式API及reactive和ref的用法,需要的朋友可以参考下

📋前言

这篇文章记录一下 Vue3 响应式的内容,其中还包括了 reactiveref 的用法。响应式是一种允许以声明式的方式去适应变化的编程范例,接下来我们一起看看。

🎯关于响应式

Vue 框架的特点之一就是响应式。Vue 2.x 是基于 Object.defineProperty() 方法实现响应式。但是 Object.defineProperty() 方法有一定的局限性,例如 Object.defineProperty() 无法监听对象属性的新增。为了克服解决这种缺陷,Vue3.x 版本引入 Proxy 对象来实现响应式。

Proxy 不仅可以监听到属性的变化和删除,同时还支持代理复杂的数据结构,例如 MapSetSymbol 等等。但是 Proxy 也是缺点,就是不兼容 IE 11(实际开发中如果要求程序员兼容 IE ,他可能反手就红温了hhh)。言归正传,如果要考虑兼容 IE 11 的问题,可以使用 Vue 2.x 版本来开发。

🎯reactive 的用法

Vuereactive() 方法通过接收一个对象,返回对象的响应式副本,我们可以看看下面这段代码。

<template>
  <p>
    响应式Count: {{ reactiveCount.count }}
    <button @click="reactiveCount.count++">++</button>
  </p>
</template>
<script setup lang="ts">
import { reactive } from "vue";
interface CountObject {
  count: number;
}
const reactiveCount = reactive<CountObject>({ count: 0 });
</script>

这里通过 reactive() 方法将 { count: 0 }对象封装成一个响应式对象,并且可以通过点击页面中的按钮来动态实现数据更新,运行效果如下图 (项目刚创建的,路有什么的没配置,忽略无关内容)

reactive() 方法封装对象成为响应式并不仅仅是一层,而是深层转换。如果想要在 script 模板中修改对象某个属性的值,直接访问进行修改即可。代码如下。

<template>
  <p>学生: {{ student.name }}</p>
  <p>成绩: {{ student.test_socre.name }} | {{ student.test_socre.score }}分</p>
  <button @click="rest">rest mark</button>
</template>
<script setup lang="ts">
import { reactive } from "vue";
interface Student {
  name: string;
  test_socre: {
    name: string;
    score: number;
  };
}
const student = reactive<Student>({
  name: "ghz",
  test_socre: {
    name: "C语言",
    score: 98,
  },
});
const rest = () => {
  student.test_socre.score = 0;
};
</script>

点击按钮后,分数重置。

这里 reactive() 将一个比较复杂的对象转换成了响应式对象,通过点击按钮,调用 rest 方法,将 student 对象中的 test_score 下的 score 重置为 0 分。同时,在方法内部,可以直接访问对象的属性进行修改数值。

🎯ref 的用法

Vue 3.x 中,ref() 负责将基本数据类型的数据封装成响应式数据。在所使用的 TypeScript 中,基本数据类型有:StringNumberBooleanBigintSymbolUndefinedNull

ref() 负责接受上述类型的数组返回一个响应式而且可变的 ref 对象,如果要获取其中的值,需要访问对象的 .value 属性来获取。我们可以看看下面这段代码。

<template>
  <div></div>
</template>
<script setup lang="ts">
import { ref } from "vue";
const str = ref<string>("hello");
const num = ref<number>(123);
const bool = ref<boolean>(true);
const bigint = ref<bigint>(9007199254740991n);
const symbolObject = Symbol("foo");
const symb = ref<symbol>(symbolObject);
const und = ref<undefined>(undefined);
const nul = ref<null>(null);
console.log(str.value); // hello
console.log(num.value); // 123
console.log(bool.value); // true
console.log(bigint.value); // 9007199254740991nX
console.log(typeof symb.value); // symbol
console.log(symb.value); // Symbol(foo)
console.log(und.value); // undefined
console.log(nul.value); // null
</script>

从上面的这段代码中可以看到,如果想要在 script 模板中读取或者修改 ref 对象的值,需要从 .value 属性中获得。在模板中可以直接通过插值表达式读取出来。这里需要注意的是 ref 是响应式对象,所以一旦 ref.value 属性值被修改,那么对应的页面模板也会重新渲染。

reactive() 负责封装对象变量,ref() 负责封装基础数据类型变量,这两个方法是 Vue3 最常见也最重要的命令之一。

📝最后

以上就是这篇文章的全部内容了,通过这篇文章,我们可以简单了解学习 Vue3 响应式的内容,通过实际案例我们也学习了 reactiveref 的用法。

到此这篇关于关于 Vue3 响应式 API 以及 reactive 和 ref 的用法的文章就介绍到这了,更多相关Vue3 reactive 和 ref 的用法内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Vue.js中的组件系统

    Vue.js中的组件系统

    这篇文章主要介绍了Vue.js之组件系统,本文通过实例代码给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
    2019-05-05
  • Vue中el-form标签中的自定义el-select下拉框标签功能

    Vue中el-form标签中的自定义el-select下拉框标签功能

    这篇文章主要介绍了Vue中el-form标签中的自定义el-select下拉框标签功能,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-04-04
  • vue3配置全局参数(挂载全局方法)以及组件的使用

    vue3配置全局参数(挂载全局方法)以及组件的使用

    这篇文章主要介绍了vue3配置全局参数(挂载全局方法)以及组件的使用方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-07-07
  • vue、element实现表格表头纵向显示方式

    vue、element实现表格表头纵向显示方式

    这篇文章主要介绍了vue、element实现表格表头纵向显示方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-10-10
  • 详解如何实现Element树形控件Tree在懒加载模式下的动态更新

    详解如何实现Element树形控件Tree在懒加载模式下的动态更新

    这篇文章主要介绍了详解如何实现Element树形控件Tree在懒加载模式下的动态更新,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2019-04-04
  • 前端vue播放m3u8、flv、mp4视频的方法示例

    前端vue播放m3u8、flv、mp4视频的方法示例

    这篇文章主要给大家介绍了关于前端vue播放m3u8、flv、mp4视频的方法,随着前端大屏页面的逐渐壮大,客户的需求也越来越多,大屏上面展示的事物也越来越丰富,需要的朋友可以参考下
    2023-07-07
  • Vue+Java 通过websocket实现服务器与客户端双向通信操作

    Vue+Java 通过websocket实现服务器与客户端双向通信操作

    这篇文章主要介绍了Vue+Java 通过websocket实现服务器与客户端双向通信操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-09-09
  • Vue3中v-if和v-for优先级实例详解

    Vue3中v-if和v-for优先级实例详解

    Vue.js中使用最多的两个指令就是v-if和v-for,下面这篇文章主要给大家介绍了关于Vue3中v-if和v-for优先级的相关资料,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2022-09-09
  • Vue中Vue router和axios的封装使用教程

    Vue中Vue router和axios的封装使用教程

    当用户登录后,后台会返回一个token给前端,前端下次进入首页后,会先判断token是否过期,如果过期自动进入登录页面,本文给大家介绍Vue中Vue router和axios的封装使用教程,感兴趣的朋友一起看看吧
    2023-11-11
  • Vue使用formData格式类型上传文件的示例

    Vue使用formData格式类型上传文件的示例

    这篇文章主要介绍了Vue使用formData格式类型上传文件的示例代码,代码简单易懂,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-09-09

最新评论