Vue3.0组合式API:使用reactive()、ref()创建响应式代理对象

1、reactive() 方法

reactive() 方法用于将定义的 JavaScript 对象转换为响应式对象。

使用方法:

javascript 复制代码
<script setup>
//第一步:导入函数
import { reactive } from 'vue';

//第二步:创建响应式对象
const data = reactive(对象类型的数据);
</script>

**【实例】**使用 reactive() 方法,创建一个响应式对象,并实现修改响应式对象的值。

html 复制代码
<template>
    <fieldset>
        <legend>组件</legend>
        <p>用户名称:{{ userInfo.userName }}</p>
        <p>用户年龄:{{ userInfo.age }}</p>
        <p>博客信息:{{ userInfo.blogName }}</p>
        <p>博客地址:{{ userInfo.blogUrl }}</p>
        <button @click="updateAge">修改年龄</button>
    </fieldset>
</template>

<script setup>
//第一步:导入函数
import { reactive } from 'vue';

//第二步:创建响应式对象,参数为对象
const userInfo = reactive({
    userName: 'pan_junbiao的博客',
    age: 0,
    blogName: '您好,欢迎访问 pan_junbiao的博客',
    blogUrl: 'https://blog.csdn.net/pan_junbiao'
});

//修改年龄方法
function updateAge() {
    userInfo.age = 36;
}

</script>

执行结果:

2、ref() 方法

reactive() 方法可以为一个 JavaScript 对象创建响应式代理,如果需要对象某个基本数据类型(如:数字、字符串)的数据创建响应式代理对象,可以通过 ref() 方法实现。该方法接收一个原始值作为参数(也支持对象类型),返回一个响应式的对象,该对象只有一个 value 属性值指向内部值。

使用方法:

html 复制代码
<script setup>
//第一步:导入函数
import { ref } from 'vue';

//第二步:创建响应式对象
const data = ref(基本数据类型 或 对象类型);
</script>

<template>
    <!-- 第三步:使用响应式对象 -->
    <p>{{ data }}</p>
</template>

**【实例】**使用 ref() 方法,创建一个响应式对象,并实现一个计数器功能。

html 复制代码
<template>
    <fieldset>
        <legend>组件</legend>
        <!-- 第三步:使用响应式对象 -->
        <p>计数结果:{{ count }}</p>
        <button @click="counter">计数器</button>
    </fieldset>
</template>

<script setup>
//第一步:导入函数
import { ref } from 'vue';

//第二步:创建响应式对象
const count = ref(0);

// 增加计数的方法
function counter() {
    //注意:使用响应式对象的.value属性,获取内部值
    count.value++;
}
</script>

执行结果:

说明:

如果将 ref() 方法创建的响应式代理对象作为属性返回,那么在模板中访问时不需要添加 .value 属性。

3、reactive 与 ref 的区别

reactive() 方法与 ref() 方法都可以用于创建响应式代理对象。但它们之间存在着以下几点区别:

  1. reactive() 方法的参数,必须是对象类型。
  2. ref() 方法参数可以是基本数据类型,也可以是对象类型。
  3. ref() 方法创建的响应式对象,必须通过 .value 属性访问。
  4. ref() 方法的内部实现依赖于 reactive() 方法。

在实际的项目开发中,推荐使用 ref() 方法,因为更加灵活。

相关推荐
酉鬼女又兒3 分钟前
入门前端CSS 媒体查询全解析:从入门到精通,打造完美响应式布局(可用于备赛蓝桥杯Web应用开发)
前端·css·职场和发展·蓝桥杯·前端框架·html5·媒体
Dxy123931021612 分钟前
HTML常用标签详解
前端·html
毛骗导演14 分钟前
@tencent-weixin/openclaw-weixin 插件深度解析(一):认证与会话管理机制
前端·架构
spencer_tseng16 分钟前
Vue node_modules
javascript·vue.js
wefly201721 分钟前
告别本地环境!m3u8live.cn一键实现 M3U8 链接预览与调试
前端·后端·python·音视频·m3u8·前端开发工具
SuperEugene24 分钟前
前端 console 日志规范实战:高效调试 / 垃圾 log 清理与线上安全避坑|编码语法规范篇
开发语言·前端·javascript·vue.js·安全
发现一只大呆瓜34 分钟前
Vue - @ 事件指南:原生 / 内置 / 自定义事件全解析
前端·vue.js·面试
庄小焱42 分钟前
React——React基础语法(1)
前端·javascript·vue.js
pingan87871 小时前
试试 docx.js 一键生成 Word 文档,效果很不错
开发语言·前端·javascript·ecmascript·word
张一凡931 小时前
重新理解 React 状态管理:用类的方式思考业务
前端·react.js