vue3 中 ref和reactive 的作用

在 Vue3 中,refreactive是用于响应式编程的两个重要函数,它们的作用如下:

ref

  • 基本作用:用于创建一个响应式的数据引用。它可以接受一个基本类型的值(如字符串、数字、布尔值等)或一个对象,然后返回一个包含该值的响应式对象。
  • 示例

vue

xml 复制代码
<template>
  <div>
    <p>{{ count }}</p>
    <button @click="increment">Increment</button>
  </div>
</template>

<script>
import { ref } from 'vue';

export default {
  setup() {
    // 创建一个响应式的count
    const count = ref(0);

    const increment = () => {
      // 这里可以直接通过count.value来修改值,视图会自动更新
      count.value++;
    };

    return {
      count,
      increment
    };
  }
};
</script>
  • 原理ref内部使用了Object.defineProperty()方法来定义gettersetter,当访问或修改ref的值时,会触发相应的gettersetter,从而实现响应式更新。

reactive

  • 基本作用:用于创建一个响应式的对象。它接受一个普通对象作为参数,并返回一个代理对象,该代理对象具有响应式特性,即当对象的属性被修改时,视图会自动更新。
  • 示例

vue

xml 复制代码
<template>
  <div>
    <p>{{ user.name }}</p>
    <p>{{ user.age }}</p>
    <button @click="updateUser">Update User</button>
  </div>
</template>

<script>
import { reactive } from 'vue';

export default {
  setup() {
    // 创建一个响应式的user对象
    const user = reactive({
      name: 'John Doe',
      age: 30
    });

    const updateUser = () => {
      // 直接修改user对象的属性,视图会自动更新
      user.name = 'Jane Doe';
      user.age = 35;
    };

    return {
      user,
      updateUser
    };
  }
};
</script>
  • 原理reactive基于 ES6 的Proxy对象实现,通过对对象的操作进行拦截,在属性被访问、修改、删除等操作时进行相应的响应式处理。

两者的区别

  • 适用场景ref适合用于处理基本类型的数据,或者需要对单个数据进行独立响应式管理的情况;reactive则更适合用于处理复杂的对象,当需要对多个相关属性进行整体的响应式管理时,使用reactive会更加方便。
  • 访问方式ref需要通过.value来访问和修改其内部的值;而reactive直接访问和修改对象的属性即可。
相关推荐
德莱厄斯几秒前
没开玩笑,全框架支持的 dialog 组件,支持响应式
前端·javascript·github
非凡ghost28 分钟前
Affinity Photo(图像编辑软件) 多语便携版
前端·javascript·后端
非凡ghost31 分钟前
VideoProc Converter AI(视频转换软件) 多语便携版
前端·javascript·后端
endlesskiller37 分钟前
3年前我不会实现的,现在靠ai辅助实现了
前端·javascript
用户9047066835739 分钟前
commonjs的本质
前端
Sailing1 小时前
5分钟搞定 DeepSeek API 配置:从配置到调用一步到位
前端·openai·ai编程
Pa2sw0rd丶1 小时前
如何在 React 中实现键盘快捷键管理器以提升用户体验
前端·react.js
非凡ghost1 小时前
ToDoList(开源待办事项列表) 中文绿色版
前端·javascript·后端
j七七1 小时前
5分钟搭微信自动回复机器人5分钟搭微信自动回复机器人
运维·服务器·开发语言·前端·python·微信
快起来别睡了1 小时前
TypeScript装饰器详解:像搭积木一样给代码加功能
前端·typescript