Vue响应式基础

前端Vue自定义精美steps步骤条进度条插件 物流信息跟踪展示组件 流程审批跟进组件 随着技术的发展,开发的复杂度也越来越高,传统开发方式将一个系统做成了整块应用,经常出现的情况就是一个小小的改动或者一个小功能的增加可能会引起整体逻辑的修改,造成牵一发而动全身。通过组件化开发,可以有效实现单独开发,单独维护,而且他们之间可以随意的进行组合。大大提升开发效率低,降低维护成本。组件化对于任何一个业务场景复杂的前端应用以及经过多次迭代之后的产品来说都是必经之路。 阅读详情

系列文章目录

提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加
例如:第一章 Python 机器学习入门之pandas的使用


提示:写完文章后,目录可以自动生成,如何生成可参考右边的帮助文档


前言

提示:这里可以添加本文要记录的大概内容:

例如:随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介绍了机器学习的基础内容。


提示:以下是本篇文章正文内容,下面案例可供参考

一、声明响应式状态

1、使用 reactive() 函数声明响应式引用类型数据

我们可以使用 reactive() 函数来声明一个响应式引用类型数据,例如:一个对象,一个数组等,值得注意的是 reactive() 函数只能用来声明一些复杂类型数据:例如:对象、(数组、Map、Set等集合),而对 string、number、boolean等基本数据类型无效。

2、使用 ref() 函数声明响应式数据

reactive() 的种种限制归根结底是因为 JavaScript 没有可以作用于所有值类型的 “引用” 机制。为此,Vue 提供了一个 ref()  方法来允许我们创建可以使用任何值类型的响应式 ref:

import { ref } from 'vue'

const count = ref(0)

 ref() 函数将传入的参数包装成一个带 .value属性的 ref 对象

const count = ref(0)

console.log(count) // { value: 0 }
console.log(count.value) // 0

count.value++
console.log(count.value) // 1

也可以在使用 ref() 函数时为参数指定泛型,以此来规范参数的数据类型。

// 得到的类型:Ref<string | number>
const year = ref<string | number>('2020')

year.value = 2020 // 成功!

 3、使用 computed() 函数声明响应式数据

computed() 函数可以用于动态的计算出数据,它会通过被使用时动态的计算出所需要的结果

<template>
  <div>
    <input v-model="testName" type="text" />
    <p v-for="(item, index) in tests" :key="index">{{ item.name }}</p>
  </div>
</template>

<script setup lang="ts">
import { ref, reactive, computed } from "vue";
const testName = ref("");
const names = reactive([
  { name: "小李" },
  { name: "小张" },
  { name: "小王" },
  { name: "小明" },
]);
const tests = computed(() => {
  console.log(testName);
  return names.filter((item) => item.name.includes(testName.value));
});
</script>

<style scoped></style>

通过是同tests从而完成 computed() 函数计算,动态的获取数据

4、Props声明

一个组件需要显式声明它所接受的 props,这样 Vue 才能知道外部传入的哪些是 props,在使用 <script setup> 的单文件组件中,props 可以使用 defineProps() 函数宏来声明:参考如下:

1、父组件中使用子组件并绑定数据传值给子组件,绑定的子组件属性名为isCollapse,数据为 isCollapse的值

<menu-logo :isCollapse="isCollapse"></menu-logo>

2、子组件定义被绑定的属性,用于接收父组件的传值

const props = defineProps({
  isCollapse: {
    require: true,
    type: Boolean,
  },
});

特别要注意的是:父组件绑定的属性名必须和子组件定义的属性名相同,此外,该传值是单向的,只能从父组件传递给子组件。

5、事件的监听与触发

在组件的模板表达式中,我们可以直接使用 $emit 方法来触发自定义事件,父组件可以通过 v-on (缩写为 @) 来监听事件:例如:

<!-- ChildComponent -->
<button @click="$emit('someEvent')">click me</button>

<!-- ParentComponent -->
<menu-logo :isCollapse="isCollapse" @custome-event="someFunction"></menu-logo>

 有时候我们想在触发事件的时候附带一个参数,通过这个参数来传递数据

<!-- ChildComponent -->
<button @click="$emit('someEvent', 1)">click me</button>

<!-- ParentComponent -->
<menu-logo :isCollapse="isCollapse" @some-event="someFunction"></menu-logo>

someFunction(n) {
    const data = n
}

 此外:所有传入 $emit() 的额外参数都会被直接传向监听器。举例来说,$emit('foo', 1, 2, 3) 触发后,监听器函数将会收到这三个参数值。

声明触发的事件

组件要触发的事件可以通过 defineEmits() 函数显示的声明。该声明定义在子组件中,然后父组件可以在引入的子组件上监听定义事件,然后通过 $emit('funcation') 来触发一个函数

<script setup>
const emit = defineEmits(['inFocus', 'submit'])

function buttonClick() {
  emit('submit')
}
</script>

通过watch监听事件

watch监听的对象必须是可以变化的,不能是不变的,当监听对象变化时,会触发watch监听并执行其中的回调函数。此外,其中的回调函数可以接收两个参数,第一个是监听对象变化后的新值,第二个是监听对象变化前的值。

<template>
  <div>
    <input v-model="testName" type="text" />
    <p v-for="(item, index) in tests" :key="index">{{ item.name }}</p>
  </div>
</template>

<script setup lang="ts">
import { ref, reactive, computed, watch } from "vue";
const testName = ref("");
const names = reactive([
  { name: "小李" },
  { name: "小张" },
  { name: "小王" },
  { name: "小明" },
]);
const tests = computed(() => {
  return names.filter((item) => item.name.includes(testName.value));
});

// watch 监听单个对象变化,回调不带参数
watch(testName, () => {
  console.log("watch监听单个对象变化,回调不带参数", testName.value);
});

// watch 监听单个对象变化,回调带参数
watch(testName, (after, before) => {
  console.log(`watch监听单个对象变化,回调带参数,变化前为: ${before} ,变化后为: ${after}`);
});

// watch 监听多对象变化,回调带参数
watch([testName,names], ([newTestName, newName],[oldTestName, oldName]) => {
  console.log(`watch监听多对象变化,回调带参数,变化前为: ${oldTestName} ,${oldName},变化后为: ${newTestName},${newName}`);
});
</script>

<style scoped></style>

常用的声明周期钩子函数:

// 页面绚烂前执行
onMounted(() => {
  alert("页面渲染前调用");
});

// 页面销毁前执行
onUnmounted(() => {
  alert("页面销毁前执行");
});

const isShow = ref(true)

function show():void {
  console.log("show",isShow.value)
  isShow.value = !isShow.value
}
</script>

<template>
  <div>
    <!-- <Home></Home> -->
    <HelloWorld v-if="isShow"></HelloWorld>
    <button @click="show">显示/隐藏组件</button>
  </div>
</template>

demo:

<template>
  <div>
   <p>refData: 姓名-{{refData.name}} 年龄-{{refData.age}}</p>
   <button @click="updateRefData">更新refData</button>
   <p>reacticeData: 姓名-{{reactiveData.name}} 年龄-{{reactiveData.age}}</p>
   <button @click="updateReactiveData">更新reactiveData</button>
  </div>
</template>

<script setup lang="ts">
import {ref,reactive} from "vue"

const refData = ref({
  name: "小李",
  age: 20
})

const reactiveData = reactive({
  name: "小王",
  age: 30
})


const updateRefData = () => {
  refData.value.name = "小龙"
}

const updateReactiveData = () => {
  reactiveData.name = "小张"
}
</script>

<style scoped></style>
<template>
  <div>
    <post-list :posts="posts"></post-list>
  </div>
</template>

<script setup lang="ts">
import { ref, reactive } from "vue";
import PostList from "../views/PostList.vue";

// 父组件通过子组件属性传值,绑定的属性可以看作是通信信号
const posts = ref([
  {
    id: 1,
    title: "李龙发坚持学习vue3",
    body: "vue3是一个有意的前端框架,要好好学习",
  },
  {
    id: 2,
    title: "李龙发坚持学习springboot",
    body: "springboot是一个有意的前端框架,要好好学习",
  },
]);
</script>

<style scoped></style>
<template>
  <div>
    <p>博客列表</p>
    <div v-for="(item,index) in posts" :key="index">
    <h3>{{item.title}}</h3>
    <p>{{item.body}}</p>
    </div>
  </div>
</template>

<script setup lang="ts">
// 子组件定义属性,用于接收传值
defineProps({
  posts: Array,
});
</script>

<style scoped></style>
<template>
  <div>
    <p>博客列表</p>
    <div v-for="(post,index) in posts" :key="index">
    <single-post :post="post"></single-post>
    </div>
  </div>
</template>

<script setup lang="ts">
import SinglePost from "../views/SinglePost.vue"
// 子组件定义属性,用于接收传值
defineProps({
  posts: Array,
});
</script>

<style scoped></style>
<template>
    <div>
    <h3>{{post.title}}</h3>
    <p>{{post.body}}</p>
    </div>
</template>

<script setup lang="ts">
defineProps({
    post: Object
})
</script>

<style scoped>

</style>

 

总结

提示:这里对文章进行总结:

例如:以上就是今天要讲的内容,本文仅仅简单介绍了pandas的使用,而pandas提供了大量能使我们快速便捷地处理数据的函数和方法。

 

Vue的响应式基础 setup、ref、reactive 阅读详情

相关推荐

Vue 3 响应式基础

该歇歇了,过完下周,考试了之后就可以去爬爬山了。响应式基础声明响应式状态reactive 相当于 Vue 2.x 中的 Vue.observable() API ,为避免与 RxJS 中...

人生代码 ---- 公众号 656

Vue-响应式数据

toRefs()、toRef(),就是把一个响应式对象给解构出来,并且解构出来的数据也具备响应式。使用ref处理对象类型的数据时在js代码中不要忘了加上。如果sum是被 ref() 包裹的数据赋予的,输入。reactive用于定义对象类型的数据。这个value中就是真正的变量数据。处理对象类型的数据底层用的是。勾选上 Dot Value。power by 尚硅谷。去定义响应式数数据。

qq_48269763的博客 1050

VUE element-ui响应式步骤进度条样式代码

几款简单的基于VUE element-ui响应式步骤进度条样式代码,active往里传值即可显示步骤。

style 用 vue 响应式

style 用vue 响应式怎么做呢?下面代码告诉你答案 :style="{backgroundSize: '100% 100%',backgroundImage: 'url(' + bgcImgUrl + ')',height:item.height - item.fontSize - 10 + 'px'}" <div :style="styleMediaObj" > </div> computed:{ styleMediaObj() {

u012174809的专栏 579

树莓派视觉小车实战:OpenCV驱动的智能物体追踪系统

本文详细介绍了如何从零开始构建一个基于树莓派的智能视觉小车,实现物体跟踪功能。通过OpenCV进行图像处理,结合颜色与轮廓识别算法,让小车能够实时锁定并追踪特定目标。内容涵盖硬件搭建、软件环境配置、核心代码解析及运动控制逻辑,为创客和开发者提供了完整的实战指南。

weixin_29047545的博客 142

【CAPL实用开发】--- 使用VN1640A测试Busoff快慢恢复

使用VN1640A测试Busoff快慢恢复,包含具体的CAPL代码实现。

LabVIEW、CAPL、python、车载以太网等学习分享,文章正在写 2093

Vue如何对样式进行操作以及响应式和非响应式的情况

样式操作 原理:Vue样式操作,其实就是对style属性和calss属性进行绑定,达到动态更改其属性值的目的 第一种方式:通过绑定字符串改变样式 <div> <input type="button" value="变" @click=" change "> <p v-bind:style="s " v-bind:class="className">啦啦啦</p> <p v-bind:style="'...

m0_63851202的博客 1234

rk3568 RGMII KSZ8795 MAC TO MAC

参考《Rockchip_Developer_Guide_Linux_MAC_TO_MAC_CN.pdf》

明天乌儿会歌唱 6491

Vue3响应式基础

当你在模板中使用了一个 ref,然后改变了这个 ref 的值时,Vue 会自动检测到这个变化,并且相应地更新 DOM。:由于 Vue 的响应式跟踪是通过属性访问实现的,因此我们必须始终保持对响应式对象的相同引用。不同的是,Vue 能够拦截对响应式对象所有属性的访问和修改,以便进行依赖追踪和触发更新。是,与普通变量不同,你可以将 ref 传递给函数,同时保留对最新值和响应式连接的访问。只有代理对象是响应式的,更改原始对象不会触发更新。因此,使用 Vue 的响应式系统的最佳实践是仅使用你声明对象的代理版本。

weixin_46504400的博客 1053

VIVADO中的IP核在MATLAB中仿真

VIVADO中的IP核在MATLAB中仿真项目简述VIVADO建立FFT IP核MATLAB调用FFT IP核 项目简述 我们都会用MATLAB进行算法验证,但是经常会发现如果VIVADO中调用了IP核,那么最终会发现VIVADO与MATLAB之间的数据不可以统一的对应起来。那么,MATLAB验证的效果就会大大下降,那么可不可以想办法将VIVADO中的IP核封装成一个函数在MATLAB中调用呢?答案是可以的。这篇博客主要以FFT的IP核为例讲解封装成一个函数并且成功在MATLAB中调用。 本次实验所使用的软

zhangningning1996的博客 6989

【Linux命令大全】006.网络通讯之netstat命令(实操篇)

本文详细介绍了Linux系统中netstat网络诊断命令的实用技巧。主要内容包括:1) 基本功能与参数详解,展示如何查看网络连接、路由表和接口统计;2) 安装方法及基础用法,如查看TCP/UDP连接、显示进程信息和路由表;3) 高级应用技巧,包括监听端口检查、连接状态统计和实时监控。文章通过表格和代码示例,系统性地呈现了netstat在系统管理中的核心应用场景,是网络故障排查和性能监控的实用指南。

yuhuasheng1997的博客 705

Vue3 响应式基础

Vue3响应式基础:本文介绍了Vue3中声明响应式状态的几种方式。直接修改变量不会触发模板更新,必须使用ref()函数来创建响应式引用。ref()可以包装任何类型数据,通过.value访问值,在模板中自动解包。文章详细展示了ref处理基础类型、对象和数组的示例,并说明ref具有深层响应性。同时介绍了shallowRef()用于放弃深层响应式以优化性能的情况,以及DOM更新的异步特性("next tick"机制)。还对比了ref与shallowRef在视图更新上的差异,指出其他响应式更新可

qq_39055970的博客 847

ABAP CURR Data Type 深度解析与实战案例

CURR 数据类型是 SAP ABAP 中为处理货币金额而设计的一种特殊数据类型。CURR 数据类型能够自动根据关联的货币代码字段(例如 WAERS)确定小数位数,从而保证金额数据的精度与正确性。CURR 类型通常在 SAP 数据字典中使用,常见于各类业务数据表中,如会计凭证、销售订单等场景中,用于存储货币金额。CURR 数据类型底层实现上类似于 DEC 数据类型,但其特别之处在于与货币代码字段的绑定,这使得金额的格式化和显示可以自动匹配相应的货币规则。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 876

Vue3响应式基础 ref 和 reactive

setup。

lazy_tomato的博客 1132

AI原生应用API编排:如何实现高效的权限管理?

随着GPT-4、Claude 3等大模型的普及,AI原生应用(从设计之初就以AI为核心的应用)正从“概念”走向“落地”。依赖大量外部API的协同工作(如用户身份API→大模型生成API→支付API→存储API)。但随之而来的挑战是:如何在复杂的API调用链中,确保每个环节的权限合规?本文将聚焦这一问题,覆盖API编排的基础逻辑、权限管理的核心机制(如RBAC/ABAC)、实战工具链(如OPA策略引擎),以及常见场景的解决方案。本文将按照“场景引入→核心概念→原理拆解→实战演练→趋势展望”的逻辑展开。

大数据洞察的博客 451

Labview如何0基础自学快速入门?(纯干货帖)

讲解了如何学习Labview,Labview如何0基础入门,自学Labview的方法。什么都不会如何学好Labview的分享,欢迎关注文章~文章提供《Labview宝典》pdf下载,和《Labview虚拟仪器数据采集与通信控制》pdf下载

关注我,更多技术问题欢迎私聊~ 2万+

Vue3响应式数据基础

大白话定义:通过 Vue3 提供的 API(比如refreactive)创建的数据,会被 Vue “监听”——当数据发生变化时,Vue 会自动找到页面中用到该数据的地方,并更新视图(页面),不用我们手动操作 DOM。步骤代码示例注意事项1. 导入 API必须导入才能使用,不导入会报错2. 定义数据const 变量名 = ref(初始值)初始值可以是任意简单类型(0、‘’、false 等)3. 访问数据变量名.value;{{ 变量名 }}脚本中必须加.value,模板中不用(Vue 自动解析)

sinat_20277079的博客 869

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

Vue深入-1 【vue基础深入介绍/响应式】

(1).vue基础介绍 1.vue是一个渐进式框架 响应式(vue核心)+vue组件化+vue Router + Vuex + vue CLI 2.vue的不同构建版本 runtime+compiler = full runtime = runtime-only 而compiler就是将template 转换为render的 new Vue({ template:'<div></div>' }) 经过compiler new Vue({ ren

Yesterday_Tomorrow的博客 310

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

Vue.js响应式基础

当你在模板中使用了一个 ref,然后改变了这个 ref 的值时,Vue 会自动检测到这个变化,并且相应地更新 DOM。:由于 Vue 的响应式跟踪是通过属性访问实现的,因此我们必须始终保持对响应式对象的相同引用。中的顶层的导入、声明的变量和函数可在同一组件的模板中直接使用。另一个 ref 的好处是,与普通变量不同,你可以将 ref 传递给函数,同时保留对最新值和响应式连接的访问。不同的是,Vue 能够拦截对响应式对象所有属性的访问和修改,以便进行依赖追踪和触发更新。的 ref,而不是普通的变量?

孤客科技 1142

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

Vue基础(2)响应式基础

vue3基础系列

羽墨灵丘的博客 843

创建Vue3的项目以及响应式基础

2.当我们创建完成,看脚手架的结构目录,我们会发现多一个vite.config.js这个文件,具有和webpack相同的功能,值得注意的是,vue3取消了对低版本浏览器即使用es6以下版本的浏览器的兼容,这样的目的使大幅度提高了性能,但是这里边并没有第三方依赖的资源包,所以我们通过npm install进行安装,这里注意的是,要在我们新建的项目作为当前目录的集成终端进行输入,否则会出现错误。选择完成我们就新建了一个基础的vue3框架了。1.vue2中通过给组件添加data数据属性来完成响应式系统的。

m0_72694993的博客 821

vue3响应式基础

ref() ​ref() 接收参数,并将其包裹在一个带有 .value 属性的 ref 对象中返回:

JiuMeilove的博客 1670

vue3模板语法+响应式基础

vue3模板语法+响应式基础

m0_61368323的博客 687

Vue3模板语法&响应式基础

模板语法、响应式基础

性感码农在线写笔记 1073

Vue学习之路04----响应式基础

ref与reactive的相关内容

q2430605716的博客 841
上一篇: Vue学习篇一
下一篇: vue练习
龙茶清欢
博客等级 码龄7年 3720粉丝 375原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

龙茶清欢

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值