vue 入门二

参考:丁丁的哔哩哔哩

11.组件基础

  • 传递 props

父组件

<BlogPost title="My journey with Vue" />

子组件

<script setup>
defineProps(['title'])
</script><template><h4>{{ title }}</h4>
</template>
  • props第二种声明方式
 对于以对象形式声明的每个属性,key 是 prop 的名称,而值则是该 prop 预期类型的构造函数。比如,如果要求一个 prop 的值是 number 类型,则可使用 Number 构造函数作为其声明的值
// 使用 <script setup>
defineProps({title: String,likes: Number
})

如果你正在搭配 TypeScript 使用 <script setup>,也可以使用类型标注来声明 props:

<script setup lang="ts">
defineProps<{title?: stringlikes?: number
}>()
</script>
属性还可以是对象的形式
// 使用 <script setup>
defineProps({title: {type: String,default: "你好",required: true},list: {type: Array,default(){ // 对象或数组的默认值必须从一个工厂函数返回return [];}}
})
  • 单向数据流

    props 因父组件的更新而变化,自然地将新的状态向下流往子组件,而不会逆向传递

  • 子组件向父组件传递数据

    $emit自定义触发事件

<script setup>
defineProps(['title'])
defineEmits(['enlarge-text'])
</script>
  • 父子组件的访问方式

    1.父组件访问子组件:$refs
    ref:用来给元素或子组件注册引用信息

<p ref="p" ></p>
console.log($refs) // 获取到p元素的各种属性
	2.子组件访问父组件:`$parent` 不建议使用,因为子组件的复用性很高3.子组件访问根组件:`$root`
  • 通过插槽来分配内容
<!-- AlertBox.vue -->
<template><div class="alert-box"><strong>This is an Error for Demo Purposes</strong><slot /></div>
</template><style scoped>
.alert-box {/* ... */
}
</style>
<AlertBox>Something bad happened.
</AlertBox>

Something bad happened.将会被放到<slot />

12.插槽

  • 具名插槽
    给插槽定义名字
<div class="container"><slot name="header"></slot><slot></slot><slot name="footer"></slot>
</div>

使用<template v-slot:header>来插入插槽内容

<BaseLayout><template v-slot:header><!-- header 插槽的内容放这里 --></template>
</BaseLayout>
  • 渲染作用域
    插槽内容无法访问子组件的数据。Vue 模板中的表达式只能访问其定义时所处的作用域
    父组件模板中的表达式只能访问父组件的作用域;子组件模板中的表达式只能访问子组件的作用域。
  • 默认内容
<button type="submit"><slot>Submit <!-- 默认内容 --></slot>
</button>
  • 作用域插槽
    插槽的内容访问到子组件的状态。
    1 在子组件传参
<!-- <MyComponent> 的模板 -->
<div><slot :text="greetingMessage" :count="1"></slot>
</div>

2 在父组件使用 v-slot=slotProps 获取参数

<MyComponent v-slot="slotProps">{{ slotProps.text }} {{ slotProps.count }}
</MyComponent>
  • 具名作用域插槽
    同时使用了具名插槽与默认插槽,则需要为默认插槽使用显式的 <template> 标签
<!-- <MyComponent> template -->
<div><slot :message="hello"></slot><slot name="footer" />
</div>
<MyComponent><!-- 使用显式的默认插槽 --><template #default="{ message }"> // 使用解构<p>{{ message }}</p></template><template #footer><p>Here's some contact info</p></template>
</MyComponent>

13.依赖注入

在这里插入图片描述

  • Provide (提供)

要为组件后代提供数据,需要使用到 provide() 函数。
第一个参数被称为注入名,可以是一个字符串或是一个 Symbol。第二个参数是提供的值,值可以是任意类型,包括响应式的状态。

<script setup>
import { provide } from 'vue'provide(/* 注入名 */ 'message', /* 值 */ 'hello!')
</script>

一个组件可以多次调用 provide(),使用不同的注入名,注入不同的依赖值。

  • 应用层 Provide
    编写插件时会特别有用
import { createApp } from 'vue'const app = createApp({})app.provide(/* 注入名 */ 'message', /* 值 */ 'hello!')
  • Inject (注入)
    如果提供的值是一个 ref,注入进来的会是该 ref 对象,而不会自动解包为其内部的值
<script setup>
import { inject } from 'vue'const message = inject('message')
</script>
  • 和响应式数据配合使用
    当提供 / 注入响应式的数据时,建议尽可能将任何对响应式状态的变更都保持在供给方组件中。

生命周期钩子

在这里插入图片描述

vue3组合式API

组合式API,将同一个逻辑关注点相关代码收集到一起

export default {setup(){// 组件被创建之前执行,所以不需要引用this,this不会指向实例const msg = "hello";console.log(msg);},beforeCreated(){ console.log("beforeCreated") },created(){ console.log("created") }
}

setup函数会在beforeCreated和created之前执行,写在beforeCreated和created中的也可以写在setup函数中!

  • setup函数—响应式变量使用
export default {setup(){// "hello" 被包裹在了对象的value属性中,使用时需要.value引用const msg = ref("hello"); console.log(msg);function changeMsg(){msg.value="你好";}// 定义响应式引用类型的数据const obj = reactive({name:"james",age:18})function changeName(){obj.name="curry"}// toRefs(object)使解构后的数据重新获得响应式// 通过ES6扩展运算符进行结构使得对象中的属性不是响应式的// ...toRefs(obj)可以获得响应式return { msg, changeMsg, ...obj }},
}

将值封装在一个对象中,看似没有必要,但为了保持 JavaScript 中不同数据类型的行为统一,这是必须的。这是因为在 JavaScript中,Number或 string等基本类型是通过值而非引用传递的。包裹在对象中,value属性值变化,就会响应式更新?

  • setup函数—watch
 const user = reactive({username:"张三",age: 18})

watch(user.age)这种形式监视不了age属性。
可以用watchEffect。

// watchEffect(回调函数)注意不需要指定监听的属性,组件初始化的时候会执行一次回调函数,自动收集依赖
watchEffect( ()=>{console.log(user.age)}
) 

watchEffect、watch的区别:

  1. watchEffect不需要指定监听的属性,自动收集依赖,只要在回调中引用到了响应式的属性,只要这些属性发生改变,回调就会执行;watch只能侦听指定的属性,做出回调函数的执行,可以侦听多个,vue3开始后
  2. watch可以获取到新值和旧值,watcheffect拿不到
  3. watchEffect在组件初始化的时候就会自动执行一次,用来收集依赖,watch不需要,一开始就指定了
  • setup函数—参数(props, context)
    在使用 <script setup> 的单文件组件中,props 可以使用 defineProps() 宏来声明:
<script setup>
const props = defineProps(['foo'])console.log(props.foo)
</script>
 export default{props:{title: String}setup(props){console.log(props.title)}
}

context参数
在这里插入图片描述

fetch

<script>
export default {
inject: ["store"],
data(){return{bannersList:[]}
}
// http://localhost:3001/banner
//fetch//原生JS,是http数据请求的一种方式
created(){
//fetch返回promise对象
fetch("http://localhost:3001/banner").then((res)>{//json()将响应的body,解析json的promise// console.log(res.json());return res.json()}
)
.then((res)=>{console.log(res),this.bannersList=res.banners
}<script/>

axios

// axios:基于promise的http库
axios.get('http://localhost:3001/banner')
.then((res)=>{console.log(res);
})

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

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

相关文章

【论文翻译】HTVGNN:一种用于交通流量预测的混合时间变化图神经网络

题目A Novel Hybrid Time-Varying Graph Neural Network For Traffic Flow Forecasting论文链接https://arxiv.org/pdf/2401.10155v4关键词交通流预测&#xff0c;图神经网络&#xff0c;Transformer&#xff0c;多头自注意力 摘要 实时且精确的交通流量预测对于智能交通系统的…

bpmn-js 元素与布局渲染

BPMN-JS 是基于 BPMN 2.0来定义元素关联关系,并通过Diagram-js库来实现web可视化的显示和编辑工作。Diagram-js 也是由BPMN.IO组织开发的一个专门用于业务流程建模符号(BPMN)的可视化开源 JavaScript 库。 元素(Elements) BPMN 2.0(Business Process Model and Notation…

大数据-158 Apache Kylin 安装配置详解 集群模式启动

点一下关注吧&#xff01;&#xff01;&#xff01;非常感谢&#xff01;&#xff01;持续更新&#xff01;&#xff01;&#xff01; 目前已经更新到了&#xff1a; Hadoop&#xff08;已更完&#xff09;HDFS&#xff08;已更完&#xff09;MapReduce&#xff08;已更完&am…

Windows环境mysql 9安装mysqld install报错:Install/Remove of the Service Denied!

Windows环境mysql 9安装mysqld install报错&#xff1a;Install/Remove of the Service Denied! 解决方案&#xff1a; 控制台/批处理命令窗口需要以系统管理员身份运行。 mysql数据库环境配置和安装启动&#xff0c;Windows-CSDN博客文章浏览阅读920次。先下载mysql的zip压缩…

一台电脑轻松接入CANFD总线-来可CAN板卡介绍

在工业控制领域&#xff0c;常常使用的总线技术有CAN(FD)、RS-232、RS-485、Modbus、Profibus、Profinet、EtherCAT等。RS-485以其长距离通信能力著称&#xff0c;Modbus广泛应用于PLC等设备&#xff0c;EtherCAT则以其低延迟和高实时性在自动化系统中备受青睐。 其中&#xf…

MySQL9的3个新特性

【图书推荐】《MySQL 9从入门到性能优化&#xff08;视频教学版&#xff09;》-CSDN博客 《MySQL 9从入门到性能优化&#xff08;视频教学版&#xff09;&#xff08;数据库技术丛书&#xff09;》(王英英)【摘要 书评 试读】- 京东图书 (jd.com) 本文讲解MySQL9的3个新特性&…

Taro 中 echarts 图表使用

1 下载 echarts4taro3 yarn add echarts4taro3 或 pnpm add echarts4taro3 或 npm i echarts4taro3 --save2 图表初始化需要先加载echarts模块 import * as echarts from "echarts4taro3/lib/assets/echarts"; // 这里用了内置的&#xff0c;也可以用自定义的 echa…

【ICPC】The 2021 ICPC Asia Shanghai Regional Programming Contest G

Edge Groups #树形结构 #组合数学 #树形dp 题目描述 Given an undirected connected graph of n n n vertices and n − 1 n-1 n−1 edges, where n n n is guaranteed to be odd. You want to divide all the n − 1 n-1 n−1 edges to n − 1 2 \frac{n-1}{2} 2n−1​…

最全方案解决Android Studio中使用lombok插件错误: 找不到符号的问题

直接原因 先直接说原因&#xff0c;小部分是因为配置错误导致的&#xff0c;注意查看下面的步骤即可&#xff0c;另一大部分是因为Java和Kotlin混编的问题&#xff0c;lombok和kapt冲突&#xff0c;其实你用了kotlin基本不需要用lombok&#xff0c;多此一举&#xff01;所以可…

SpringBoot实现电子文件签字+合同系统!

一、前言 二、项目源码及部署 1、项目结构及使用框架 2、项目下载及部署 三、功能展示 一、前言 今天公司领导提出一个功能,说实现一个文件的签字+盖章功能,然后自己进行了简单的学习,对文档进行数字签名与签署纸质文档的原因大致相同,数字签名通过使用计算机加密来验证 (…

集合框架09:泛型概述、泛型类、泛型接口

1.泛型概述 泛型的本质是参数化类型&#xff0c;把类型作为参数传递&#xff1b; 常见有泛型类、泛型接口、泛型方法 语法&#xff1a;<T,...> T称为类型占位符&#xff0c;表示一种引用类型&#xff1b; 好处&#xff1a;1.提高代码的重用性&#xff1b;2.防止类型类…

python中的数组模块numpy(一)(适用物联网数据可视化及数据分析)

目录 一、创建数组对象array&#xff0c;认识数组的格式 二、类型比较 三、arange函数&#xff1a;创建一维等差数组 四、专门创建数组的linspace、logsapace函数 1.linspace函数&#xff1a;创建等差数列数组。 2.logsapce函数&#xff1a;创建等比数列数组。 3.zeros函数…

通信工程学习:什么是VHDL超高速集成电路硬件描述语言

VHDL&#xff1a;超高速集成电路硬件描述语言 VHDL&#xff0c;全称为Very-High-Speed Integrated Circuit Hardware Description Language&#xff0c;即超高速集成电路硬件描述语言&#xff0c;是一种用于电路设计的高级语言。以下是关于VHDL的详细介绍&#xff1a; 一、起源…

数据结构——排序(2)

数据结构——排序(2) 文章目录 数据结构——排序(2)前言&#xff1a;1.快速排序&#xff08;非递归版本&#xff09;基本步骤&#xff1a;代码实现 2.归并排序算法思想&#xff1a;核心步骤&#xff1a;代码实现&#xff1a;特征总结&#xff1a; 3.计数排序&#xff08;非比较…

【ubuntu】ubuntu20.04安装cuda12.6与显卡驱动

目录 1.安装cuda12.6 2.安装显卡驱动 1.安装cuda12.6 https://developer.nvidia.com/cuda-toolkit-archive https://developer.nvidia.com/cuda-12-6-0-download-archive?target_osLinux&target_archx86_64&DistributionUbuntu&target_version20.04&target_…

[MyBatis-Plus]快速入门

介绍 MyBatis-Plus是MyBatis的好朋友, 与MyBatis配合, 实现开发效率的提高 官网: 特点: 润物细无声: 只做增强不做改变, 引入它不会对现有工程产生影响, 如丝般顺滑效率自上: 只需简单配置, 即可快速进行单表CRUD, 从而节省大量时间功能丰富: 代码生产, 自动分页, 逻辑删除, …

【重学 MySQL】六十六、外键约束的使用

【重学 MySQL】六十六、外键约束的使用 外键约束的概念关键字主表和从表/父表和子表外键约束的创建条件外键约束的特点外键约束的创建方式外键约束的删除外键约束的约束等级外键约束的级联操作外键约束的示例外键约束的作用开发场景阿里开发规范 在MySQL中&#xff0c;外键约束…

雷池社区版配置遇到问题不要慌,查看本文解决

很多新人不太熟悉反向代理&#xff0c;所以导致配置站点出现问题 配置问题 记录常见的配置问题 配置后攻击测试没有拦截记录 检查访问请求有没有真实经过雷池 有很多新人配置站点后&#xff0c;真实的网站流量还是走的源站&#xff0c;导致雷池这边什么数据都没有 配置后…

【C】分支与循环2--while/for/do-while/goto以及break和continue在不同循环中的辨析~

分支与循环 while循环 if与while的对比 if(表达式)语句&#xff1b;while(表达式)语句&#xff1b;下面来看一个例子&#xff1a; 用 if 写&#xff1a; #define _CRT_SECURE_NO_WARNINGS #include <stdio.h> int main() {if (1)printf("hehe");//if后面条…

YOLOv8模型改进 第七讲 一种新颖的注意力机制 Outlook Attention

随着目标检测技术的不断发展&#xff0c;YOLOv8 作为最新一代的目标检测模型&#xff0c;已经在多个基准数据集上展现了其卓越的性能。然而&#xff0c;在复杂场景中&#xff0c;如何进一步提升模型的检测精度和鲁棒性依然是一个重要挑战。本文将探讨将 Outlook Attention 机制…