reactive与ref VCA

简介

Vue3 最大的一个变动应该就是推出了 CompositionAPI,可以说它受ReactHook 启发而来;它我们编写逻辑更灵活,便于提取公共逻辑,代码的复用率得到了提高,也不用再使用 mixin 担心命名冲突的问题。

ref 与 reactive 是 Vue3 新推出的主要 API 之一,它们主要用于响应式数据的创建。

reactive 能做的,ref 都能胜任,并且 ref 底层还是使用 reactive 来做的!!!

ref 函数可以接收原始数据类型引用数据类型

reactive 函数只能接收引用数据类型

reactive包装函数

<template>
  <div>
    <!-- 案列1 -->
    <button @click="myClick">点我</button>
    <div>{{ obj.name }}--{{ obj.age }}</div>
    <div>{{ obj2.email }}</div>
    <!-- <div>{{ obj3 }}</div> -->
    <hr>

    <!-- 列表案列 -->
    <ul>
      <li v-for="item in obj.datalist" :key="item">{{ item }}</li>
    </ul>

    <!-- 模糊查询案列 -->
    <input type="text" v-model="obj.mytitle">
    <ul>
      <li v-for="item in GetSelectItems()" :key="item">{{ item }}</li>
    </ul>

  </div>
</template>
<script>
import { reactive } from 'vue';
export default {
  setup() {

    //用reactive是一个包装函数,包装后就得到了一个响应式对象obj (setup中可以存在多个reactive,只是正常情况下一个就够用了,比如下面的obj 和obj2)

    //注意const是申明常量的,常量不是不可变的吗?为什么还可以通过obj.name = "李四"来改变它呢? 
    //其实obj只是reactive({name: "张三",age: 29})这个对象的一个引用(指针),obj不能再进行修改,只是说obj不能再指向其他的对象了,例如:obj="aaa"就会报错,因为obj所指向对象的引用已经变化了。
    //但是obj指向的这个对象它本身的属性是可以修改的,所以 obj.name = "李四"不会报错
    const obj = reactive({
      name: "张三",
      age: 29,
      datalist: ["aaa", "bbb", "ccc"],
      mytitle: ""
    })

    const obj2 = reactive({ email: "abc@qq.com" })

    //const obj3=reactive("张三"); //reactive不支持这种简单类型的包装,它只支持复杂类型的包装,如对象,数组等。
    //const obj3=reactive("");     //reactive不支持这种简单类型的包装
    //const obj3=reactive(1);      //reactive不支持这种简单类型的包装

    const myClick = () => {
      obj.name = "李四"
    }

    const GetSelectItems = () => {
      //includes() 方法用于判断字符串是否包含指定的子字符串
      //filter方法是过滤方法, item表示当前遍历datalist数组的项,如果当前项包含了input中输入的值,则找出来,然后统一返回一个数组
      var selectIitemArr = obj.datalist.filter(item => item.includes(obj.mytitle))
      return selectIitemArr;
    }

    //所有的函数与对象都需要在return中进行返回
    //obj,myClick是定义在setup中的,它只能在setup中使用,为了在setup外面使用(例如DOM中)我们就必须要把他们暴露出去,就需要放到return中进行返回
    return {
      obj, //等同于obj:obj
      obj2,
      obj3,
      myClick, //返回myClick
      GetSelectItems,
    }
  }
}

</script>

ref包装函数

<template>
  <div>
    <!-- 案列1 -->
    <button @click="myClick">点我</button>
    <div>{{ obj.name }}--{{ obj.age }}</div>
    <div>{{ obj2.email }}</div>
    <div>{{ obj3 }}</div>
    <div>{{ obj4 }}</div>
    <div>{{ obj5 }}</div>
    <div>{{ obj6?"中国":"美国" }}</div>
    <hr>

    <!-- 列表案列 -->
    <ul>
      <li v-for="item in obj.datalist" :key="item">{{ item }}</li>
    </ul>

    <!-- 模糊查询案列 -->
    <input type="text" v-model="obj.mytitle">
    <ul>
      <li v-for="item in GetSelectItems()" :key="item">{{ item }}</li>
    </ul>

  </div>
</template>
<script>
import { reactive, ref } from 'vue';
export default {
  setup() {

    //用reactive是一个包装函数,包装后就得到了一个响应式对象obj (setup中可以存在多个reactive,只是正常情况下一个就够用了,比如下面的obj 和obj2)

    //注意const是申明常量的,常量不是不可变的吗?为什么还可以通过obj.name = "李四"来改变它呢? 
    //其实obj只是ref({name: "张三",age: 29})这个对象的一个引用(指针),obj不能再进行修改,只是说obj不能再指向其他的对象了,例如:obj="aaa"就会报错,因为obj所指向对象的引用已经变化了。
    //但是obj指向的这个对象它本身的属性是可以修改的,所以 obj.value.name = "李四"不会报错
    const obj = ref({
      name: "张三",
      age: 29,
      datalist: ["aaa", "bbb", "ccc"],
      mytitle: ""
    })

    const obj2 = ref({ email: "abc@qq.com" })

    const obj3=ref("王五"); //ref支持这种简单类型的包装  原理就是new Proxy({value:"王五"}) 注意:在DOM模板中使用{{obj3}}  在<script>中使用需要在后面加.value 如:obj3.value
    const obj4=ref("");     //ref支持这种简单类型的包装  原理就是new Proxy({value:""})
    const obj5=ref(1);      //ref支持这种简单类型的包装  原理就是new Proxy({value:1})
    const obj6=ref(true);

    const myClick = () => {
      obj.value.name = "李四"
    }

    const GetSelectItems = () => {

      //特别注意:经过ref包装函数包装的对象,在<script>中必须要在对象名称后面.value ,在DOM模板中则不需要.value
      // 比如:
      // obj.value.name; 获取obj对象中的name值
      // obj.value.age;  获取obj对象中的age值
      // obj.value.datalist; 获取obj对象中的datalist值
      // obj.value.mytitle;  获取obj对象中的mytitle值

      //includes() 方法用于判断字符串是否包含指定的子字符串
      //filter方法是过滤方法, item表示当前遍历datalist数组的项,如果当前项包含了input中输入的值,则找出来,然后统一返回一个数组
      var selectIitemArr = obj.value.datalist.filter(item => item.includes(obj.value.mytitle))
      return selectIitemArr;
    }

    //所有的函数与对象都需要在return中进行返回
    //obj,myClick是定义在setup中的,它只能在setup中使用,为了在setup外面使用(例如DOM中)我们就必须要把他们暴露出去,就需要放到return中进行返回
    return {
      obj, //等同于obj:obj
      obj2,
      obj3,
      obj4,
      obj5,
      obj6,
      myClick, //返回myClick
      GetSelectItems,
    }
  }
}

</script>

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

torch.div()不支持round_mode参数

问题怎么定位的呢&#xff0c;把报错信息一股脑甩给chatgpt&#xff0c;问他什么意思&#xff0c;他就反馈说“在标准的Python库中&#xff0c;div() 函数不接受 rounding_mode 参数。”&#xff08;虽然这个问题也不难&#xff0c;但是改偷的懒还是要偷&#xff09; 问题再现…

【JMeter】逻辑控制器分类以及功能介绍

常用逻辑控制器的分类以及介绍 If Controller 满足if条件才会执行取样器 Loop Controller 对取样器循环多次 ForEach Controller

【POI-EXCEL-下拉框】POI导出excel下拉框数据太多导致下拉框不显示BUG修复

RT 最近在线上遇到一个很难受的BUG&#xff0c;我一度以为是我代码逻辑出了问题&#xff0c;用了Arthas定位分析之后&#xff0c;开始坚定了信心&#xff1a;大概率是POI的API有问题&#xff0c;比如写入数据过多。 PS&#xff1a;上图为正常的下拉框。但是&#xff0c;当下拉…

AGENTTUNING:为LLM启用广义的代理能力

背景 翻译智谱这篇文章的初衷是&#xff0c;智谱推出了他们所谓的第三代大模型。这第三代的特点在哪呢&#xff1a;个人总结主要有一下几个点&#xff1a; 1.用特定prompt方式自闭环方式解决安全注入问题 2.增加了模型function call、agent能力 3.具备代码能力 4.做了能力…

python 安装 pyquicklz 库函数

问题描述&#xff1a; 安装 pyquicklz 库的时候 报错 error: subprocess-exited-with-error 解决方法&#xff1a; 安装 Cython 库&#xff1a; pip install Cython -i https://pypi.tuna.tsinghua.edu.cn/simple/ 安装 Microsoft C Build Tools Microsoft C Build Tools 的下…

idea中启动多例项目配置

多实例启动 日常本地开发微服务项目时&#xff0c;博主想要验证一下网关的负载均衡以及感知服务上下线能力时&#xff0c;需要用到多实例启动。 那么什么是多实例启动嘞&#xff1f;简单说就是能在本地同时启动多个同一服务。打个比方项目中有一个 MobileApplication 服务&…

WPS Office 制作下拉两级联动

文章目录 前言WPS Office 制作下拉两级联动1. 准备两级联动数据![在这里插入图片描述](https://img-blog.csdnimg.cn/dc8c21c5f12349aeb467eed266888618.png)2. 设置一级下拉3. 设置二级联动下拉 前言 如果您觉得有用的话&#xff0c;记得给博主点个赞&#xff0c;评论&#xf…

Java使用OkHttp库采集电商视频简单代码示例

很多朋友经常问我&#xff0c;能不能用OkHttp库的Java编写一个淘宝视频的采集程序&#xff0c;今天它来了&#xff01;在市面上众多的采集框架中&#xff0c;OkHttp库的应用比较广泛&#xff0c;而且也是非常的稳定&#xff0c;下面的代码示例不知道能不能满足大家的胃口呢&…

【Qt】文件系统

文章目录 文件系统文件操作案例&#xff1a;显示路径到标题框&#xff0c;显示内容到文本框对文件进行写操作获取文件相关信息 文件系统 Qt 通过QIODevice提供了对 I/O 设备的抽象&#xff0c;这些设备具有读写字节块的能力&#xff0c;下面是 I/O 设备的类图&#xff1a; QIO…

Apache服务的搭建与配置(超详细版)

前言 Apache是一种常见的Web服务器软件&#xff0c;广泛用于Linux和其他UNIX操作系统上。它是自由软件&#xff0c;可以通过开放源代码的方式进行自由分发和修改。Apache提供了处理静态和动态内容的能力&#xff0c;而且还支持多种编程语言和脚本&#xff0c;如PHP、Python和P…

【数智化人物展】途牛旅游网副总裁王树柏:人性化深耕,数智化赋能,合力共促企业可持续发展...

王树柏 本文由途牛旅游网副总裁王树柏投递并参与《2023中国企业数智化转型升级先锋人物》榜单/奖项评选。 数据智能产业创新服务媒体 ——聚焦数智 改变商业 数字经济时代下&#xff0c;科技与信息的红利快速释放。“数智化”是这个时代所有企业都要面对的大趋势、大机遇。“数…

Linux期末复习——C编程基础

Linux下C语言编译环境概述 编译器&#xff1a;VI 编译器&#xff1a;GCC 调试器&#xff1a;GDB 项目管理器&#xff1a;make vi编辑器 三种模式 命令行模式&#xff1a;默认模式&#xff0c;不可以编辑&#xff0c;只可以上下移动光标“整行删除&#xff0c;删除字符”&…

RabbitMQ消费者的可靠性

目录 一、消费者确认 二、失败重试机制 2.1、失败处理策略 三、业务幂等性 3.1、唯一消息ID 3.2、业务判断 3.3、兜底方案 一、消费者确认 RabbitMQ提供了消费者确认机制&#xff08;Consumer Acknowledgement&#xff09;。即&#xff1a;当消费者处理消息结束后&#x…

7+共病思路。WGCNA+多机器学习+实验简单验证,易操作

今天给同学们分享一篇共病WGCNA多机器学习实验的生信文章“Shared diagnostic genes and potential mechanism between PCOS and recurrent implantation failure revealed by integrated transcriptomic analysis and machine learning”&#xff0c;这篇文章于2023年5月16日发…

小程序获取头像和昵称的思路

小程序获取头像和昵称的基本方法是调用小程序自带的API wx.getUserProfile()&#xff0c;这也是小程序官方目前最推荐的做法。成功获取用户名头像之后&#xff0c;小程序允许保存调用的结果&#xff0c;以便下一次打开页面的时候自动显示头像和名字。保存用户名和头像并不是保存…

电子电器架构 —— 车载网关初入门(三)

电子电器架构 —— 车载网关初入门(三) 我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 PS:小细节,本文字数5000+,详细描述了网关在车载框架中的具体性能设置。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 没有人关注你。也无需有人关…

Flask Shell 操作 SQLite

一、前言 这段时间在玩Flask Web&#xff0c;发现用Flask Shell去操作SQLite还是比较方便的。今天简单地介绍一下。 二、SQLite SQLite是一种嵌入式数据库&#xff0c;它的数据库就是一个文件&#xff0c;处理速度快&#xff0c;经常被集成在各种应用程序中&#xff0c;在IO…

【精】UML及软件管理工具汇总

目录 1 老七工具&#xff08;规划质量&#xff09; 1.1 因果图&#xff08;鱼骨图、石川图&#xff09; 1.2 控制图 1.3 流程图:也称过程图 1.4 核查表:又称计数表 1.5 直方图 1.6 帕累托图 1.7 散点图&#xf…

Java设计模式之状态模式

定义 对有状态的对象&#xff0c;把复杂的“判断逻辑”提取到不同的状态对象中&#xff0c;允许状态对象在其内部状态发生改变时改变其行为。 结构 状态模式包含以下主要角色。 环境角色&#xff1a;也称为上下文&#xff0c;它定义了客户程序需要的接口&#xff0c;维护一个…

java如何获取调用接口的ip?

获取调用者的ip 场景&#xff1a;想知道哪个ip访问的某个接口时&#xff0c;就需要打印出来看看&#xff0c;这时就可以使用这个方法了。 案例&#xff1a; //HttpServletRequest 入参加上,请求对象public ForkResponse queryXXX(RequestBody XXXX xxxx, HttpServletRequest …
最新文章