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直接访问和修改对象的属性即可。
相关推荐
wxr06161 分钟前
部署Spring Boot项目+mysql并允许前端本地访问
前端·spring boot·mysql·持续部署
假装我不帅7 分钟前
jquery-validation使用
前端·javascript·jquery
怕浪猫12 分钟前
React从入门到出门第六章 事件代理机制与原生事件协同
前端·javascript·react.js
天府之绝16 分钟前
uniapp 中使用uview表单验证时,自定义扩展的表单,在改变时无法触发表单验证处理;
开发语言·前端·javascript·vue.js·uni-app
be or not to be17 分钟前
Html-CSS动画
前端·css·html
初恋叫萱萱23 分钟前
技术基石与职场进阶:构建从Web后端到高性能架构的完整知识图谱
前端·架构·知识图谱
木木木一26 分钟前
Rust学习记录--C9 错误处理
前端·学习·rust
局外人LZ28 分钟前
libsodium.js:web端与 Node.js 的现代加密工具集,构建前端安全加密体系
前端·javascript·node.js
xkxnq33 分钟前
第二阶段:Vue 组件化开发(第 20天)
前端·javascript·vue.js
「、皓子~37 分钟前
AI 创作系列(34)海狸IM桌面版 v1.1 正式发布:Vite + Electron 性能优化与体验升级
前端·人工智能·electron·开源·开源软件·im