Day 04-Composition API_ref reactive 函数

news2024/11/24 13:21:45

1.ref函数

  • 作用: 定义一个响应式的数据; 

  • 语法: const xxx = ref(initValue)

    • 创建一个包含响应式数据的引用对象(reference对象,简称ref对象)

    • JS中操作数据: xxx.value

    • 模板中读取数据: 不需要.value,直接:<div>{{xxx}}</div>

  • 备注:

    • 接收的数据可以是:基本类型、也可以是对象类型。

    • 基本类型的数据:响应式依然是靠Object.defineProperty()getset完成的

    • 对象类型的数据:内部 “ 求助 ” 了Vue3.0中的一个新函数—— reactive函数

App.vue

ref定义基本类型的数据:响应式依然是靠Object.defineProperty()getset完成的

  1. ref 对于基本类型的数据确实采用 Object.defineProperty()走getset走的数据劫持方式
  2. 数据劫持才是响应式的根基, 我的劫持到你修改的数据,才能去写一个逻辑更新页面!
<template>
  <h1>一个人的信息</h1>
  <h2>姓名{{ name }}</h2>
  <h2>年龄{{ age }}</h2>
  <button @click="changeInfoHandle">修改个人信息</button>
</template>

<script>
import { ref } from "vue";
export default {
  name: "App",

  setup() {
    /** 
     * 定义引用对象: 
     *  RefImpl {__v_isShallow: false, dep: Set(1), __v_isRef: true, _rawValue: 'ls', _value: 'zs'}
     *  RefImpl : Reference 引用; Implement 实现。
     *  
     * **/ 
    let name = ref("zs");
    let age = ref("18");

    // 修改数据 
    function changeInfoHandle() {
      name.value = "ls";
      age.value = "20";
      console.log(name, age);
    }

    return {
      name,
      age,
      changeInfoHandle,
    };
  },
};
</script>

ref定义对象类型的数据:内部 “ 求助 ” 了Vue3.0中的一个新函数—— reactive函数

<template>
  <h1>一个人的信息</h1>
  <h2>工作种类: {{ job.type }}</h2>
  <h2> 薪水: {{ job.salary }}</h2>
  <button @click="changeInfoHandle">修改个人信息</button>
</template>

<script>
import { ref, reactive } from "vue";
export default {
  name: "App",

  setup() {    
    let job = ref({ type: "前端工程师", salary: "30k" });


    // 修改数据
    function changeInfoHandle() {
      job.value.type = 'UI工程师', 
      job.value.salary = '60k'
      console.log(job);
    }

    return {
      name,
      age,
      job,
      changeInfoHandle,
    };
  },
};
</script>

2.reactive函数

  • 作用: 定义一个对象类型的响应式数据(基本类型不要用它,要用ref函数

  • 语法:const 代理对象= reactive(源对象)接收一个对象(或数组),返回一个代理对象(Proxy的实例对象,简称proxy对象)

  • reactive定义的响应式数据是"深层次的"

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

<template>
  <h1>一个人的信息</h1>
  <h2>姓名: {{ person.name }}</h2>
  <h2>年龄: {{ person.age }}</h2>
  <h2>工作种类: {{ person.job.type }}</h2>
  <h2>薪水: {{ person.job.salary }}</h2>
  <h2>测试数据c: {{ person.job.a.b.c }}</h2>
  <h2>爱好: {{ person.hobby }}</h2>
  <button @click="changeInfoHandle">修改个人信息</button>
</template>

<script>
import { ref, reactive } from "vue";
export default {
  name: "App",
  setup() {
 // reactive() : 处理响应式数据是深层次的; 
  let person = reactive({
     name : "zs",
     age :"20",
     job : {
       type: "前端工程师",
       salary: "30k",
       a: {
         b: {
           c: 777
         }
       }
     },
    
      hobby: ['抽烟', '喝酒', '烫头']
     })
    // 修改数据
    function changeInfoHandle() {
      person.name = "ls";
      person.age = "20";
      person.job.type = "UI工程师";
      person.job.salary = "60k";
      person.job.a.b.c = 999
      person.hobby[0] = '学习'
    }

    return {
      person,
      changeInfoHandle,
    };
  }
};
</script>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/116610.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

永恒之蓝(MS17-010)

目录追溯了解网络IP查找环境条件复现流程445端口使用MSF的永恒之蓝漏洞模块扫描模块攻击模块温馨提醒&#xff1a;纯水文&#xff0c;如果不幸翻到这篇文章&#xff0c;可以立刻关闭&#xff01; 先整理两个学习的链接&#xff08;本文学习第一个&#xff09;&#xff1a; htt…

JDK19都出来了~是时候梳理清楚JDK的各个版本的特性了【JDK17特性讲解】

JDK各个版本特性讲解-JDK17特性 一、JAVA17概述 JDK 16 刚发布半年&#xff08;2021/03/16&#xff09;&#xff0c;JDK 17 又如期而至&#xff08;2021/09/14&#xff09;&#xff0c;这个时间点特殊&#xff0c;蹭苹果发布会的热度&#xff1f;记得当年 JDK 15 的发布也是同天…

Kafka Consumer auto.offset.reset 理解

先来一下 kafka 官网对于 auto.offset.reset 的解释&#xff1a; 上面的描述挺准确的&#xff0c;但如果没有相关背景会感觉很懵逼。网上也有很多文章讲这个东西并给了很多例子&#xff0c;看了之后总感觉没有理解清楚。 先来看一下怎么查看消费者 group 的 offset 情况&…

wpf需求及实现方法 动态创建控件 对数据模板任意对象操作 查找由 DataTemplate 生成的元素 查找由 ControlTemplate 生成的元素

我想实现一个支持多设备同时更新固件的应用。如下图 插入多少个设备就显示多少个进度度。每个进度条上显示对应的串口及进度。 最终实现演示如下&#xff1a; public MainWindow(){InitializeComponent();List<DownloadProgress> test new List<DownloadProgress>…

文件系统与文件系统管理以及RAID技术的思想

文件与文件系统FCB&#xff08;文件控制块&#xff09;文件是什么&#xff1f;文件是对 磁盘的抽象所谓文件 是指 一组带标识&#xff08;标识即为文件名&#xff09;的、在逻辑上有完整意义的信息项的序列。信息项&#xff1a;构成文件内容的基本单位&#xff08;单个…

AUTOSAR开发

综述 本文档主要描述了VP项目MCU芯片TC297的AUTOSAR方案。MCU的基础软件由AUTOSAR软件实现&#xff0c;AUTOSAR可简易理解为如下层次。 MCU芯片驱动层&#xff1a;MCU芯片的抽象层&#xff0c;目的是将各类MCU芯片进行抽象&#xff0c;向上统一接口&#xff0c;隔离其他层次软件…

自动控制原理笔记-改善性能的措施-高阶系统动态性能

目录 改善性能的措施&#xff1a; 两种改善二阶系统动态性能的措施&#xff1a; &#xff08;1&#xff09;测速反馈——增加阻尼 &#xff08;2&#xff09;比例微分——提前控制 改善系统性能方法对比&#xff1a;​ 两种改善性能方法的对比&#xff1a; 高阶系统动态性…

vscode插件开发入门案例-一键删除js文件中的某个函数

vscode插件开发入门案例-一键删除js文件中的某个函数vscode插件开发入门案例-一键删除js文件中的某个函数demo介绍准备工作插件开发package.json介绍extension.ts调试插件插件打包插件安装插件发布vscode应用市场vscode插件开发入门案例-一键删除js文件中的某个函数 代码仓库地…

数据分析之excel和finebi报表可视化对比

当我们拿到数据&#xff0c;想对数据实现可视化报表设计。第一步就是要了解什么是数据可视化分析&#xff0c;且数据可视化分析的方法有什么&#xff1f;而且当我们拿到excel表格的数据&#xff0c;第一个想法是excel表格自身实现报表数据可视化&#xff0c;除了用excel本身实现…

微信小程序 | 小程序组件化开发

&#x1f5a5;️ 微信小程序 专栏&#xff1a;小程序组件化开发 &#x1f9d1;‍&#x1f4bc; 个人简介&#xff1a;一个不甘平庸的平凡人&#x1f36c; ✨ 个人主页&#xff1a;CoderHing的个人主页 &#x1f340; 格言: ☀️ 路漫漫其修远兮,吾将上下而求索☀️ &#x1f44…

梦想绽放CEO熊文:停产单一VR产品,VST将成为VR行业标配

很久没在北京参加线下活动了&#xff0c;真不容易。今天奇遇VR正式发布了消费级双目全彩VST VR设备&#xff1a;奇遇Dream MIX。会后&#xff0c;我还参加了梦想绽放CEO熊文的群访&#xff0c;从中了解到更多消息。 奇遇Dream MIX 关于奇遇Dream MIX这款产品&#xff0c;我开始…

【苹果iMessage相册推信息推】那些新功效理当可以或许压倒您。保护用户隐私是苹果的起点之一

推荐内容IMESSGAE相关 作者推荐内容iMessage苹果推软件 *** 点击即可查看作者要求内容信息作者推荐内容1.家庭推内容 *** 点击即可查看作者要求内容信息作者推荐内容2.相册推 *** 点击即可查看作者要求内容信息作者推荐内容3.日历推 *** 点击即可查看作者要求内容信息作者推荐…

如何从小白起步成为百万博主|配音运营工具必不可少

从新手做短视频&#xff0c;无论你是抖音还是快手&#xff0c;掌握一些视频运营工具&#xff0c;能让我们日常工作事半功倍以下是我做短视频三年来&#xff0c;一直都在使用的工具&#xff0c;从视频素材剪辑软件音效配音&#xff0c;满足了我日常运营的需求&#xff0c;新手也…

Windows Defense Mechanism - Part 1

Overview If I’m a long-time CTF player (or HackTheBox lab machine player), things are gonna go a little off when I’m put into a real world scenario - meaning that, when facing a well defended Windows machine. This article will summarize the main Window…

基于Java(Struts2 框架)+Mysql实现(Web)学生成绩管理系统【100010053】

学生成绩信息管理系统 Summary JavaWeb 课程设计作品。类似学校的教务管理系统&#xff0c;实现了其中的部分功能&#xff0c;包括学生的增删改查&#xff0c;成绩的增删改查等。 Note 关于数据库 数据库名称&#xff1a;smxy_class字符集&#xff1a;UTF-8先建立数据库&am…

Zookeeper下载、本地模式安装、集群操作

目录 1、Zookeeper下载地址 2 、本地模式安装 2.1安装前准备 2.2配置修改 2.3操作 Zookeeper 2.4配置参数解读 3、集群操作 3.1 集群安装 3.2 ZK 集群启动停止脚本 4、客户端命令行操作 4.1、命令行语法 4.2、znode 节点数据信息 4.3点类型&#xff08;持久/短暂…

【案例教程】基于现代R语言【Tidyverse、Tidymodel】的机器学习方法与案例分析实践技术应用

【点击观看视频】基于现代R语言【Tidyverse、Tidymodel】的机器学习方法与案例分析实践技术应用 机器学习已经成为继理论、实验和数值计算之后的科研“第四范式”&#xff0c;是发现新规律&#xff0c;总结和分析实验结果的利器。机器学习涉及的理论和方法繁多&#xff0c;编程…

【Unity篇】Unity入门介绍

目录 游戏引擎 Unity3D特点 窗口介绍 快捷键 创建工程 组件的获取 游戏引擎 程序的框架:一款游戏最最核心的代码。 包含以下系统:渲染系统&#xff0c;物理引擎&#xff0c;碰撞检测系统&#xff0c;音效&#xff0c;脚本引擎&#xff0c;动画系统&#xff0c;人工智能…

全志V85x芯片 Tina Linux RISC-V E907核心开发指南

全志V85x芯片 Tina Linux RISC-V E907核心开发指南 1 编写目的 介绍v85X 上E907 的启动环境和AMP 的环境搭建。 2 使用范围 全志V85X 系列芯片 3 环境 A7 SDK&#xff1a;Tina E907 SDK&#xff1a;melis 4 SDK 快捷命令说明 这里主要介绍几个下文会用到的命令&#xf…

【嵌入式项目开源】基于ESP32的墨水屏桌面小屏幕

首先简要介绍一下这个项目&#xff1a; 这个项目的开源主要包括硬件&#xff0c;固件和软件两部分&#xff0c;外壳后面如果做了也会开源出来。该项目主要是参考了以下教学视频。 链接&#xff1a;桌面小屏幕实战教学 其中硬件部分改动不大&#xff0c;主要是把USB驱动改成了Ty…