组合式API

1.入口:setup

setup中的数据和方法必须return出去,模板才能使用

<script>
export default {setup () {console.log('setup');const message = 'this is a message'const logMessage = () => {console.log(message);}return {message,logMessage}},beforeCreate() {console.log('beforecreate');}
}
</script><template><div>This is div{{ message }}<button @click="logMessage">log</button></div>
</template>

但是定义一个数据就要手动导出一次,未免太麻烦了。因此vue3加入语法糖

下面是简化后的代码:

<script setup>
const message = 'this is a message'
const logMessage = () => {console.log(message)
}
</script>

2.reactive 和 ref函数

都用于生成响应式数据,但是reactive只能接收对象类型,ref可以接受对象或者简单类型


//导入函数
import { reactive } from 'vue';//传入一个对象类型的参数 变量接收
const state = reactive ({count:0
})

在模板中调用:

<button>{{ state.count }}</button>

ref用法相同,但是在计数器案例上,对自增的操作不太一样

const setCount = () => {state.count++,count1.value++
}

对象.属性是reactive的操作,变量.value是ref的操作(本质还是把变量当做对象来处理的)

3.computed

计算属性,基本思想和vue2一样,不过是在组合式API下写法变化了。

import { computed } from 'vue';const list = ref([1,2,3,4,5,6,7,8])
const computedList = computed(()=>{return list.value.filter(item => item>2)
})
  <div>原始响应式数组-{{ list }}计算属性数组-{{ computedList }}</div>

小案例是使用filter函数计算出大于2的元素。

为了验证其是响应式,再添加一个定时器

setTimeout(()=>{list.value.push(9,10)
},3000)

4.watch

侦听器,作用:侦听数据变化,数据变化时执行回调函数


import { watch } from 'vue';
const count2 = ref(0)watch(count2,(newValue,oldValue)=> {console.log(`count2发生变化,旧值为${oldValue},新值为${newValue}`);})

模板中配合计数器使用

侦听多个数据:

const count2 = ref(0)
const count3 = ref(0)watch([count2,count3],([newCount2,newCount3],[oldCount2,oldCount3])=> {console.log('count2 or count3 变化了',[newCount2,newCount3],[oldCount2,oldCount3]);})

immediate

在侦听器创建时立即执行回调,响应式数据变化时也执行回调

比如光标聚焦到搜索框时就出现下拉列表,输入东西后就会变化


const count = ref(0)
const setCount = () => {count.value++
}watch(count,()=> {console.log('count变化了'); 
},{immediate:true
})

这个demo执行时,还没有点击count,控制台会先打印出count变化了

deep

深度侦听。首先,watch的默认机制:通过watch监听的ref对象默认是浅层侦听,直接修改嵌套的对象属性不会出发回调函数执行,需要开启deep。

比如直接在控制台修改上面count的值:

给count赋值为3时,不会触发count变化了,点击按钮让count++才会触发.

const state = ref({ count:0 })watch(state,()=> {console.log('count变化了'); 
},{deep:true
})const changeStateByCount = () => {state.value.count++
}

刚开始不加deep时,点击按钮控制台不会打印,加上后就可以打印了,这就是用了deep监听

缺点就是deep开启后会侦听整个对象,就是比如state有两个属性,一个是count,一个是age,但是我只想侦听age,不管count变化情况。

这时候我想到把watch的第一个属性改成state.value.age

接着就给我报错了,它说 接受的参数不符合要求,只能接受一个方法 ,整个ref对象,一个reactive对象或者元素是这几个类型的数组。所以不能接收对象里面的一个属性。但是vue有解决办法:

watch(()=>state.value.age,()=>console.log('count变化了')
)

第一个参数不能是对象的属性,但他可以是函数的返回值,让函数返回 对象的属性不就行了吗

这样就可以侦听某个属性了。

5.vue3的生命周期函数API

选项式API组合式API
beforeCreate/createdsetup
beforeMountonBeforeMount
mountedonMounted
beforeUpdateonBeforeUpdate
updatedonUpdated
beforeUnmountonBeforeUnmount
unmountedonUnmounted


import { onMounted } from 'vue'
onMounted(()=> {console.log('组件挂载完毕,mounted执行了');
})

6.父子通信

父传子

1.父组件中给子组件绑定属性

2.子组件内部通过props选项接收

下面是son的vue文件:

这是father的:

就是import引入son的组件。通过在标签里面赋值来传给儿子,儿子在defineProps中定义这么一个变量来接收父亲传过来的数据。

如何传入响应式数据:

  <SonCom message="666666666" :count = "count"/>

在响应式数据前面加冒号。

子传父

1.父组件中给子组件标签通过@绑定事件

2.子组件内部通过$emit方法触发事件

son:

father:

7.模板引用

通过ref标识获取真实的DOM对象或者组件实例对象

defineExpose()

默认情况下语法糖<script setup>不会把组件内部的属性和方法给父最组件访问,可以通过defineExpose()暴露子组件的属性和方法。

获取模板引用的时机是:组件挂载完毕后

8.provide和inject

作用:顶层组件向任意的底层组件传递数据和方法,实现跨层组件通信

跨层传递普通数据:

1.顶层组件通过provide提供数据

2.底层组件通过inject获取数据

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Visual Studio 2017编译libexpat源码过程

一、编译环境 操作系统&#xff1a;Windows 10 企业版 64位 编译工具&#xff1a;Visual Studio 2017 构建工具&#xff1a;CMake3.22 源码版本&#xff1a;libexpat-R_2_4_0 二、CMake生成解决方案 解压libexpat源码&#xff0c;然后启动CMake选择libexpat源码目录&#xff1…

数据结构 ——— 单链表oj题:链表的回文结构

目录 题目要求 手搓简易单链表 代码实现 题目要求 对于一个单链表&#xff0c;设计一个时间复杂度为O(N)&#xff0c;空间复杂度为O(1)的算法&#xff0c;判断其是否为回文结构&#xff0c;给定一个链表的头指针 head&#xff0c;返回一个 bool 值&#xff0c;代表其是否为…

从认识String类,到走进String类的世界

作为一个常用的数据类型&#xff0c;跟随小编一同进入String的学习吧&#xff0c;领略String的一些用法。 1. 认识 String 类 2. 了解 String 类的基本用法 3. 熟练掌握 String 类的常见操作 4. 认识字符串常量池 5. 认识 StringBuffer 和 StringBuilder 一&#xff1a;…

Selenium WebDriver和Chrome对照表

PS&#xff1a;我的没下载WebDriver 也没配置环境变量 也能用Selenium 网上有说把WebDriver放到chrome的安装目录并将路径配到path中【可能之前用playwright下载过】 查看浏览器版本号 在浏览器的地址栏&#xff0c;输入chrome://version/&#xff0c;回车后即可查看到对应版…

文心一言 VS 讯飞星火 VS chatgpt (363)-- 算法导论24.3 5题

五、Newman 教授觉得自己发现了 Dijkstra 算法的一个更简单的证明。他声称 Dikstra 算法对最短路径上面的每条边的松弛次序与该条边在该条最短路径中的次序相同&#xff0c;因此&#xff0c;路径松弛性质适用于从源结点可以到达的所有结点。请构造一个有向图来说明 Dijkstra 算…

SpringBoot基础(四):bean的多种加载方式

SpringBoot基础系列文章 SpringBoot基础(一)&#xff1a;快速入门 SpringBoot基础(二)&#xff1a;配置文件详解 SpringBoot基础(三)&#xff1a;Logback日志 SpringBoot基础(四)&#xff1a;bean的多种加载方式 目录 一、xml配置文件二、注解定义bean1、使用AnnotationCon…

逻辑回归(下): Sigmoid 函数的发展历史

背景 闲来无事翻了一下之前买的一个机器学习课程及之前记录的网络笔记&#xff0c;发现遇到公式都是截图&#xff0c;甚至是在纸上用笔推导的。重新整理一遍之前逻辑回归函数的学习笔记&#xff0c;主要是为了玩一下 LaTex 语法&#xff0c;写公式挺有意思的。 整理之前三篇笔…

鸿蒙harmonyos next flutter通信之MethodChannel获取设备信息

本文将通过MethodChannel获取设备信息&#xff0c;以此来演练MethodChannel用法。 建立channel flutter代码&#xff1a; MethodChannel methodChannel MethodChannel("com.xmg.test"); ohos代码&#xff1a; private channel: MethodChannel | null nullthis.c…

使用JavaScript写一个网页端的四则运算器

目录 style(内联样式表部分) body部分 html script 总的代码 网页演示 style(内联样式表部分) <style>body {font-family: Arial, sans-serif;display: flex;justify-content: center;align-items: center;height: 100vh;background-color: #f0f0f0;}.calculator {…

Pikachu-目录遍历

目录遍历&#xff0c;跟不安全文件上传下载有差不多&#xff1b; 访问 jarheads.php 、truman.php 都是通过 get 请求&#xff0c;往title 参数传参&#xff1b; 在后台&#xff0c;可以看到 jarheads.php 、truman.php所在目录&#xff1a; /var/www/html/vul/dir/soup 图片…

golang gin入门

gin是个小而精的web开发框架 官方文档 安装 go get -u github.com/gin-gonic/gin最简单的起手代码 package mainimport ("net/http""github.com/gin-gonic/gin" )func main() {r : gin.Default()r.GET("/ping", func(c *gin.Context) {c.JSON…

openpnp - 图像传送方向要在高级校正之前设置好

文章目录 openpnp - 图像传送方向要在高级校正之前设置好笔记图像传送方向的确定END openpnp - 图像传送方向要在高级校正之前设置好 笔记 图像传送方向和JOG面板的移动控制和实际设备的顶部摄像头/底部摄像头要一致&#xff0c;这样才能和贴板子时的实际操作方向对应起来。 …

大数据新视界 --大数据大厂之 从 Druid 和 Kafka 到 Polars:大数据处理工具的传承与创新

&#x1f496;&#x1f496;&#x1f496;亲爱的朋友们&#xff0c;热烈欢迎你们来到 青云交的博客&#xff01;能与你们在此邂逅&#xff0c;我满心欢喜&#xff0c;深感无比荣幸。在这个瞬息万变的时代&#xff0c;我们每个人都在苦苦追寻一处能让心灵安然栖息的港湾。而 我的…

【Vue】vue-admin-template项目搭建

准备 node环境 node&#xff1a;v16.12.0npm&#xff1a;8.1.0 vue-element-admin下载 官网&#xff1a;https://panjiachen.github.io/vue-element-admin-site/guide/ 我这边下载的是4.4.0版本的&#xff0c;使用其他版本可能会因为所需要的node和npm版本过低或过高导致异常…

【包教包会】2D图片实现3D透视效果(支持3.x、支持原生、可合批)

将去年写的SpriteFlipper从2.x升级到3.x。 如果需要2.x版本或需要了解算法思路&#xff0c;请移步&#xff1a;https://blog.csdn.net/weixin_42714632/article/details/136745051 优化功能&#xff1a;可同时绕X轴和Y轴旋转&#xff0c;两者效果会叠加。 完美适配Web、原生…

Gridview配置数据源--信任服务器证书

目录 背景过程Gridview配置数据源GridView与数据源&#xff1a;数据库连接与安全&#xff1a;信任服务器证书&#xff1a;配置信任服务器证书&#xff1a;注意事项&#xff1a; 生成连接字符串程序运行报错问题解决 总结 背景 Gridview配置数据源之后&#xff0c;程序报错 过…

k8s的pod的管理和优化

资源管理介绍 在kubernetes中&#xff0c;所有的内容都抽象为资源&#xff0c;用户需要通过操作资源来管理kubernetes。 kubernetes的本质上就是一个集群系统&#xff0c;用户可以在集群中部署各种服务 所谓的部署服务&#xff0c;其实就是在kubernetes集群中运行一个个的容器…

C++ | Leetcode C++题解之第456题132模式

题目&#xff1a; 题解&#xff1a; class Solution { public:bool find132pattern(vector<int>& nums) {int n nums.size();vector<int> candidate_i {nums[0]};vector<int> candidate_j {nums[0]};for (int k 1; k < n; k) {auto it_i upper_…

动态规划基础一>面试题 08.01. 三步问题

1.题目&#xff1a; 2.解析&#xff1a; 代码&#xff1a; public int waysToStep(int n) {/**1.创建dp表2.初始化3.填表4.返回值*/int MOD (int)1e9 7;//注意不能超出int范围&#xff0c;每做一次操作要取模//处理边界情况if(n 1 || n 2) return n;if(n 3) return 4;//1…

【Kubernetes】常见面试题汇总(五十七)

目录 125. K8S 创建服务 status 为 ErrlmagePull&#xff1f; 126.不能进入指定容器内部&#xff1f; 特别说明&#xff1a; 题目 1-68 属于【Kubernetes】的常规概念题&#xff0c;即 “ 汇总&#xff08;一&#xff09;~&#xff08;二十二&#xff09;” 。 题目 …