VUE3.0学习

news2024/11/20 17:38:45

一、父子传值

		父组件向子组件传值和vue2.0相比区别不大,区别在于api的使用,让接收参数的写法多样化。
 父组件:::::
<template>
  <div class="about">
    <div>
      <main>
        <TheWelcome :info="parMsg"/>
      </main>
    </div>
  </div>
</template>
<script lang="ts" setup>
import { ref  } from 'vue'; // ref 实现响应式
import TheWelcome from '@/views/ceshi/test.vue' // 子组件
const parMsg = ref('这是父组件传值')
</script>
子组件:::::
<template>
    <div class="about">
        <h1>这是测试页面</h1><button @click="formDate(count)">点击</button>
        <div :id="`count-${count}`" >{{ count  }}{{  info }} </div>
    
    </div>
</template>
第一种方法:::
<script lang="ts">
    import { ref } from 'vue';
    export default {
        props:{
            info:String
        },
        setup(){
            let count = ref(0)
       
            return {
                count 
            }
       
        }
    }
    第二种方法:::
    <script lang="ts" steup>
      import { ref,toRefs,defineProps } from 'vue';
    export default {
          const props = defineProps({
              info:String
        })
          const { info } = toRefs(props)
    }
    </script>

总结:

父子通信,这里用的api来进行接收的,如toRefs,来接收,或是直接使用vue2.0的props也是可以的,需要注意的是steup的位置是在script标签还是在默认导出设置中。
toRefs 是一个api,
在这里插入图片描述
我看的比较迷糊,两个api都是有复制功能的,就好比this指向,复制后应该指向的是栈,但是使用roRefs后,指向的是堆中的地址

toRefs:复制 reactive 里的所有属性并转成 响应式ref
 const stateAsRefs = toRefs(state)

toRef: 复制 reactive 里的单个属性并转成 ref
 const stateAsRefs = toRefs(state,'foo')

二、子组件传递父组件

子组件
<template>
    <div class="about">
        <button @click="formChildren()">向父组件传值</button>
    </div>
</template>
第一种:::
<script lang="ts">
    import { ref,reactive,toRefs,defineProps } from 'vue';
    export default {
        setup(props,context){
            let count = ref(0)
            let formChildren = () => {
                context.emit('list','这是子组件传值')   // 第一个是传递到变量名,第二个是传递的内容
            }
            return {
                count,
                formChildren
            }
        }
    }
</script>
第二种:::
  <button @click="formChildren()">向父组件传值</button>
  <script lang="ts" setup>
    import { ref,reactive,toRefs,defineProps,defineEmits  } from 'vue';
    const emit = defineEmits(['formChildren'])
        const formChildren = () =>{
            let param={
                content:'b'
            }
            //传递给父组件
            emit('formChildren',param)
        }
   </script>
父组件
<template>
  <div class="about">
 
    <div>这是子组件传递:{{ childrenVal }}</div>
    <div>
      <main>
        <TheWelcome @list="messageChildren"/>
      </main>
    </div>
  </div>
</template>
<script lang="ts" setup>
	import { ref  } from 'vue'; // ref 实现响应式
	import TheWelcome from '@/views/ceshi/test.vue'
	let childrenVal = ref('')
	let messageChildren = (val) => {
	  childrenVal.value = val
	}
</script>

总结:子组件向父组件传值是通过在setup中声明变量通过,setup的位置也一定程度上决定了是否使用默认导出,setup的context配合emit来进行广播的,vue2.0是使用this.$emit()广播,父组件接收用v-on来接受传递的lsit,这点和vue2.0一样,需要注意的是这里是一个函数,赋值的同名变量,并且重要的一点是必须要提前声明一个ref(‘’)的变量通过.value来赋值,这里不能用this,ref是实现响应式的一个api,使用时需要import { ref } from ‘vue’;

三、组件的引入2.0与3.0

	组件在2.0时是需要components去把引用的页面去进行一个注册,然后才能以标签形式使用
	```
		export default {
				  name: 'MasterView',
				  components: {  DiaLogForm, DiaLogTable }
				  data(){
				  }
		}
	```
	而3.0可以省略这一步,直接引入然后在***main* **中使用即可。
	![在这里插入图片描述](https://img-blog.csdnimg.cn/770ab573882c42c9a1366aa45c85350c.png)

四、setup的使用

这个setup是vue3.0新增加的一个生命周期,是在beforeCreate之前的生命周期,所以在setup中是没有this的,需要注意。
还有就是setup的位置,如果是在script标签中,就可以不在export中声明数据。
在export default中,setup是需要return出生命的变量的,两者的设置也有略微的不同。
在这里插入图片描述

在这里插入图片描述
不管是setup如何设置,最后要使用,可以使用{{ count }} 直接使用。
在setup中不能使用this,但是可以通过 ref这个api来进行一个数据响应式绑定。

 import { ref  } from 'vue'; // ref 实现响应式
 const parMsg = ref('这是父组件传值')
 let childrenVal = ref('')
 let messageChildren = (val) => {
childrenVal.value = val
}

setup有两个参数,propscontext。props是组件接收的参数,context里面有三个属性分别是attrs、slot和emit

总结:

		1.setup在使用时,可以是标签中,亦可以是导出中
		2.setup是一个```生命周期函数```,在  ==beforCreate== 之前,所以没有 ```this ```
		3.setup数据不具备响应式,需要配合```ref```来实现数据绑定,数据可以return暴露出去
		4.setup返回值的数据(方法)模板可以直接使用 {{ count }}
		5.setup函数中定义的数据属性默认都不是响应式的,如果想要声明响应式的数据属性则需借助ref或者reactive两个函数来实现 。

五、ref

官网介绍:

在这里插入图片描述

个人理解:

 	ref接受参数并返回它包装在一个带有 ==.value== 属性的对象中,然后可以使用该属性访问或改变反应变量的值

具体使用:
在这里插入图片描述
效果:
ref是可以绑定数据,实现响应式数据的一个api,效果等于v-model

六、Provide/Inject

流程: 提供/注入,在父组件创建Provide,然后在需要的后代组件中使用Inject获取

1.在父组件引入Provide

	import { ref,provide  } from 'vue';  // 在父组件引入provide
2.在setup中声明变量,Provide('注入名','值')
![在这里插入图片描述](https://img-blog.csdnimg.cn/5dffcb1d00314fb48793cafbb22071c3.png)

3.在后代组件中是引入inject,导出后可以通过this访问,默认值是undefined
在这里插入图片描述

在这里插入图片描述

总结:

1. 只要在父组件声明Provide就可以在后代组件中去使用,无论嵌套的有多深

在这里插入图片描述

  1. Provide/Inject 只能在setup中去使用
  2. 注入会在组件自身状态之前被解析,所以可以在data()中使用this获取注入名
  3. Inject默认获取的是undefined,可以设置默认值, inject(‘注入值’, ‘default value’),只有为空时才会触发

未完,待续。。。

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

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

相关文章

【react】理解Fiber

FiberFiber概念结构Fiber 树的遍历是这样发生的【深度遍历】。window.requestIdleCallback()requestAnimationFrameFiber 是如何工作的结论有react fiber&#xff0c;为什么不需要vue fiberFiber 概念 JavaScript引擎和页面渲染引擎两个线程是互斥的&#xff0c;当其中一个线…

12月 被大厂以“人员优化”的名义 无情的辞退了...

前几天&#xff0c;一个认识了好几年在大厂工作的测试员朋友&#xff0c;年近30了&#xff0c;却被大厂以“人员优化”的名义无情被辞&#xff0c;据他说&#xff0c;有一个月散伙饭都吃了好几顿…… 在很多企业&#xff0c;都有KPI考核&#xff0c;然后在此基础上还会弄个“…

IB EE 学习干货,从选学科/课题/写稿/对稿/交稿几个方面入手分享

本文从选学科&#xff0c;选课题&#xff0c;写稿&#xff0c;对稿&#xff0c;交稿几个方面入手分享。关于不同学科的EE&#xff0c;本文涵盖了数学和物理EE&#xff08;因为我们猜很多同学们都选了这两个学科的EE&#xff09;。 文中分享的学习方法都是我们从个人经历出发&am…

微服务 @SentinelResource 服务网关

微服务 SentinelResource 服务网关SentinelResourceFeign整合Sentinel什么场景下需要Feign集合Sentinel呢&#xff1f;服务网关为什么需要网关网关组件Gateway快速入门什么是Gateway操作示例自定义路由规则SentinelResource 自定义异常返回是对所有的情况进行统一处理&#xf…

DTC补货实战:从算法到落地

本文作者&#xff1a;凡飞&#xff0c;从快递到快消&#xff0c;一个平凡的供应链算法深耕者。“ 我希望衡量我们ai团队价值的&#xff0c;不是创造了多么精深的算法&#xff0c;而是跨越算法到落地间距离的能力。”近年来随着电商行业从增量市场逐步成长到了存量市场&#xff…

第二章.神经网络—激活函数

第二章.神经网络 感知机存在如何设置合适的权重问题&#xff0c;神经网络的出现就是为了解决感知机存在的问题&#xff0c;神经网络的一个重要性质&#xff1a;它可以自动的从数据中学习到合适的权重参数。 2.1.从感知机到神经网络 1.神经网络示例 1).示意图&#xff1a; 网络…

《技术领导力:程序员如何才能带团队》 读书笔记

技术管理工作 管理者能力 作为技术团队管理者&#xff0c;无论具体管几个人&#xff0c;最好能够拥有以下能力&#xff0c;才能满足各个需求方提出的需求&#xff1a; 深入理解一门或多门编程语言深入理解多种流行的框架系统架构能力强&#xff0c;拥有复杂系统的设计经验积…

Hystrix高可用框架

Hystrix是什么 Hystrix Home,Hystrix是高可用性保障的一个框架。Netflix的API团队从2011年开始做一些提升系统可用性和稳定性的工作,Hystrix就是从那时候开始发展的。在2012年的时候,Hystrix就变得比较成熟和稳定了,Netflix中除了API团队以外,很多其他的团队都开始使用Hy…

vue2.6.10+vite2开启template模板动态编译

在从vue-cli迁移到vite2的时候&#xff0c;之前在代码中使用的模板编译遇到了问题&#xff1a;我在项目中会根据后台返回的内容动态渲染&#xff0c;如果返回内容中有<el-image>等标签&#xff0c;v-html无法识别非html标签&#xff0c;导致图片渲染失败&#xff0c;因此…

基于Springboot搭建java项目(三十二)—— Docker部署java服务

Docker部署java服务 一、Linux服务安装Docker 关于Docker的安装在之前的Linux的三种安装方式的第三种安装方式中有介绍 传送门&#xff1a;https://blog.csdn.net/m0_46616045/article/details/128841396 二、编写DockerFile 1、将需要部署的Jar包放到服务器上 2、编写Doc…

3.【SpringBoot源码】SpringBoot自动配置原理

目录 一、简介 1)、SpringBootConfiguration 2)、ComponentScan 3)、EnableAutoConfiguration 二、AutoConfigurationPackage 三、Import(AutoConfigurationImportSelector.class) 1)、AutoConfigurationImportSelector介绍 2)、自动配置流程 2-1)、ConfigurationClas…

Vue中数组的列表渲染(v-for渲染数组,数组改变,页面不渲染问题)

1.基本的列表&#xff08;v-for的基本使用&#xff09;&#xff1a; <template><!-- v-for指令:1.用于展示列表数据2.语法&#xff1a;v-for"(item, index) in xxx" :key"yyy"3.可遍历&#xff1a;数组、对象、字符串&#xff08;用的很少&#…

计算机网络基础学习指南(二)

4. HTTP协议 简介 5. Socket 5.1 简介 即套接字&#xff0c;是应用层 与 TCP/IP 协议族通信的中间软件抽象层&#xff0c;表现为一个封装了 TCP / IP协议族 的编程接口&#xff08;API&#xff09; Socket不是一种协议&#xff0c;而是一个编程调用接口&#xff08;API&#…

HashMap源码详细解析

HashMap的继承:HashMap实现了Cloneable接口&#xff0c;所以可以被克隆HashMap实现了Serializable接口&#xff0c;可以被序列化HashMap继承了AbstractMap并实现了Map接口&#xff0c;具有Map接口的所有功能存储结构:JDK1.7(包括1.7)之前HashMap底层是数组链表结合而成的高级数…

【深度学习】ReID相关知识点解析(PCB、BoT、MGN)

PCB(Part-based Convolutional Baseline) RPP结构图: 网络流程: 经过一个backbone得到特征图T。T中的每列向量称为f(1,1,c)。 如:输入(384,128,3)经过backbone降采样16倍后得到特征图T(24,8,c)。 将T从上到下切成p(p=6)片。记为P_i(i=1…p)。——测试时接第…

PMP应该如何备考?掌握着三个步骤

在我这里大概就是有三个点需要注意的&#xff1a; 重点一&#xff0c;好好上课 我选择的是线下培训班&#xff0c;一共是6节线下课&#xff0c;每次线下课都占用了周末一整天的时间。 从早上9点到下午5点&#xff0c;没上课前我觉得应该会蛮累的&#xff0c;但实际上下来其实…

linux 安装mysql服务(超详细)

目录 1、查看是否已经安装了mysql 2、下载官方mysql安装包 3、安装MySQL包 4、安装 MySQL 5、启动 Mysql 服务 6、查看mysql运行状态 7、查看初始密码&#xff08;红色部分为初始密码) 8、进入数据库 1.首先关闭mysql服务 2.然后编辑文件&#xff0c;添加代码 3.新增…

什么是散点图?

在之前的文章中&#xff0c;我已经介绍过堆叠条形图、分组条形图和堆叠面积图&#xff0c;本文介绍一些散点图的百科知识。 散点图&#xff0c;顾名思义就是使用一些散乱的点来展示数据的一种图表&#xff0c;这些点在哪个位置&#xff0c;是由其X值和Y值确定的&#xff0c;因此…

【C++】常量引用(常引用)一些经典问题

常量引用1.常量引用错误的案例2.常量引用的前提条件3.分析错误案例4.总结常量引用1.常量引用错误的案例2.常量引用的前提条件3.分析错误案例4.总结1.常量引用错误的案例 1.常量引用的使用的场景一般是用来修饰函数的形参&#xff0c;防止误操作。 比如&#xff1a; //在下列函数…

HTB_Find The Easy Pass

文章目录信息收集分析汇编代码信息收集 下载后是一个加密的zip压缩包&#xff0c;里面是一个exe文件 解压密码获取&#xff1a; 使用zip2john暴破&#xff0c;失败 zip2john Find\ The\ Easy\ Pass.zip >hash.txt john -w/usr/share/wordlists/rockyou.txt hash.txt使用…