欢迎来到代码驿站!

vue

当前位置:首页 > 网页前端 > vue

对Vue3中reactive的深入理解

时间:2023-02-25 11:44:29|栏目:vue|点击:

Vue3 reactive的理解

1.什么是reactive?

  • reactive是Vue3中提供实现响应式数据的方法.
  • 在Vue2中响应式数据是通过defineProperty来实现的.
  • 而在Vue3响应式数据是通过ES6的Proxy来实现的

2.reactive注意点

  • reactive参数必须是对象(json/arr)
  • 如果给reactive传递了其他对象,默认情况下修改对象,界面不会自动更新,如果想更新,可以通过重新赋值的方式.

错误示范

  • 当传递的是非对象时,页面不会发生响应

在这里插入图片描述

正确实例

在这里插入图片描述

arr正确实例

  • 传入数组会转成proxy对象

在这里插入图片描述

Vue3笔记 reactive函数

  • 作用:定义一个对象类型的响应式数据(基本类型不要用它,要用ref函数)
  • 语法:const 代理对象= reactive(源对象)接收一个对象(或数组),返回一个代理对象(Proxy的实例对象,简称proxy对象)

reactive定义的响应式数据是“深层次的”。

内部基于 ES6 的 Proxy 实现,通过代理对象操作源对象内部数据进行操作。

<template>
  <img alt="Vue logo" src="./assets/logo.png" />
  <h1>一个人的信息</h1>
  <h1>年龄:{{ p.age }}</h1>
  <h1>姓名:{{ p.name }}</h1>
  <h1>工作种类: {{ p.job.type }}</h1>
  <h1>工作薪水: {{ p.job.salary }}</h1>
  <h1>爱好: {{ hobby }}</h1>
  <h1>测试的数据: {{ p.a.b.c }}</h1>
  <button @click="changeInfo">修改人的信息</button>
</template>
<script>
import HelloWorld from "./components/HelloWorld.vue";
import { ref, reactive } from "vue";
export default {
  name: "App",
  components: {
    HelloWorld,
  },
  setup() {
    let hobby = reactive(["抽烟", "喝酒", "打麻将"]);
    // 数据
    let p = reactive({
      name: "张三",
      age: 19,
      job: {
        type: "前端工程师",
        salary: "20k",
      },
      a: {
        b: {
          c: 666666,
        },
      },
      hobby: ["抽烟", "喝酒", "打麻将"],
    });

    // 方法
    function changeInfo() {
      console.log(p.job);
      p.name = "李四";
      p.age = 119;
      p.job.salary = "69k";
      p.job.type = "算法工程师";
      p.hobby[0] = "学习";
      hobby[0] = "学习算法";
    }
    return {
      p,
      hobby,
      changeInfo,
    };
  },
};
</script>

总结一下:

  • reactive主要是用来操作对象或数组,定义为响应式数据
  • 增删改查都可以操作。
  • 内部是通过Proxy代理的形式

上一篇:vue实现倒计时功能

栏    目:vue

下一篇:vue使用wavesurfer.js解决音频可视化播放问题

本文标题:对Vue3中reactive的深入理解

本文地址:http://www.codeinn.net/misctech/226392.html

推荐教程

广告投放 | 联系我们 | 版权申明

重要申明:本站所有的文章、图片、评论等,均由网友发表或上传并维护或收集自网络,属个人行为,与本站立场无关。

如果侵犯了您的权利,请与我们联系,我们将在24小时内进行处理、任何非本站因素导致的法律后果,本站均不负任何责任。

联系QQ:914707363 | 邮箱:codeinn#126.com(#换成@)

Copyright © 2020 代码驿站 版权所有