vue3官网文档学习、复习笔记(快速上手)

目录

2.Attribute 绑定(v-bind)

3.事件监听(v-on)

4.表单绑定(v-model)

5.条件渲染(v-if)

6.列表渲染(v-for)

 all.value = all.value.filter((t) => t !== all)

7.计算属性(computed())

8.生命周期和模板引用(onMounted、ref=)

9.侦听器(watch())

10.组件(ChildComp)

11.Props(使用父组件动态数据defineProps())

12.Emits(子组件向父组件触发事件)

13.插槽(slots)


能在改变时触发更新的状态被称作是响应式的。我们可以使用 Vue 的 reactive() API 来声明响应式状态。由 reactive() 创建的对象都是 JavaScript Proxy,其行为与普通对象一样:

reactive() 只适用于对象 (包括数组和内置类型,如 Map 和 Set)。而另一个 API ref() 则可以接受任何值类型。ref 会返回一个包裹对象,并在 .value 属性下暴露内部值。

reactive() 和 ref() 的细节:响应式基础 | Vue.js (vuejs.org)

例:

<script setup>
import { reactive, ref } from 'vue'const counter = reactive({ count: 0 })
const message = ref('Hello World!')
</script><template><h1>{{ message }}</h1><p>Count is: {{ counter.count }}</p>
</template>

注意我们在模板中访问的 message ref 时不需要使用 .value:它会被自动解包,让使用更简单。

2.Attribute 绑定(v-bind)

mustache 语法 (即双大括号) 只能用于文本插值。为了给 attribute 绑定一个动态值,需要使用 v-bind 指令

例:

把一个动态的 class 绑定添加到这个 <h1> 上,并使用 titleClass 的 ref 作为它的值。如果绑定正确,文字将会变为红色。

<script setup>
import { ref } from 'vue'const titleClass = ref('title')
</script><template><h1 :class="titleClass">Make me red</h1>
</template><style>
.title {color: red;
}
</style>

3.事件监听(v-on)

例:

尝试自行实现 increment 函数并通过使用 v-on 将其绑定到按钮上

<script setup>
import { ref } from 'vue'const count = ref(0)function increment() {count.value++
}
</script><template><button @click="increment">count is: {{ count }}</button>
</template>

4.表单绑定(v-model)

我们可以同时使用 v-bind 和 v-on 来在表单的输入元素上创建双向绑定

为了简化双向绑定,Vue 提供了一个 v-model 指令,它实际上是上述操作的语法糖

例:

试着在文本框里输入——你会看到 <p> 里的文本也随着你的输入更新了

<script setup>
import { ref } from 'vue'const text = ref('')
</script><template><input v-model="text" placeholder="Type here"><p>{{ text }}</p>
</template>

5.条件渲染(v-if)

例:

同时展示了两个 <h1> 标签,并且按钮不执行任何操作。尝试给它们添加 v-if 和 v-else 指令,并实现 toggle() 方法,让我们可以使用按钮在它们之间切换。

<script setup>
import { ref } from 'vue'const awesome = ref(true)function toggle() {awesome.value = !awesome.value
}
</script><template><button @click="toggle">toggle</button><h1 v-if="awesome">Vue is awesome!</h1><h1 v-else>Oh no 😢</h1>
</template>

6.列表渲染(v-for)

 例:

这里有一个简单的 todo 列表——试着实现一下 addTodo() 和 removeTodo() 这两个方法的逻辑,使列表能够正常工作!

<script setup>
import { ref } from 'vue'// 给每个 todo 对象一个唯一的 id
let id = 0const newTodo = ref('')
const todos = ref([{ id: id++, text: 'Learn HTML' },{ id: id++, text: 'Learn JavaScript' },{ id: id++, text: 'Learn Vue' }
])function addTodo() {todos.value.push({ id: id++, text: newTodo.value })newTodo.value = ''
}function removeTodo(todo) {todos.value = todos.value.filter((t) => t !== todo)
}
</script><template><form @submit.prevent="addTodo"><input v-model="newTodo"><button>Add Todo</button>    </form><ul><li v-for="todo in todos" :key="todo.id">{{ todo.text }}<button @click="removeTodo(todo)">X</button></li></ul>
</template>

 all.value = all.value.filter((t) => t !== all)

该代码通过删除任何等于 的元素来筛选数组中的元素。然后将过滤后的结果分配回 。todos.value.filter((t) => t !== todo)

当您要从数组中删除特定元素时,可以使用此代码。它遍历数组中的每个元素 () 并检查它是否不等于 。如果条件为 true,则该元素将保留在筛选结果中,否则将删除该元素。

过滤后,生成的数组被赋回变量,有效地使用修改后的数组对其进行更新

<form @submit.prevent=“addTodo”>

该代码为元素上的事件设置事件处理程序。提交表单时,它会调用 Vue.js 实例中指定的方法或函数。<form @submit.prevent="addTodo">

该指令阻止默认表单提交行为,这通常涉及刷新页面或导航到新 URL。相反,它允许您定义自定义逻辑以使用该方法处理表单提交

7.计算属性(computed())

计算属性会自动跟踪其计算中所使用的到的其他响应式状态,并将它们收集为自己的依赖。计算结果会被缓存,并只有在其依赖发生改变时才会被自动更新。

例:

试着添加 filteredTodos 计算属性并实现计算逻辑!如果实现正确,在隐藏已完成项目的状态下勾选一个 todo,它也应当被立即隐藏。

<script setup>
import { ref, computed } from 'vue'let id = 0const newTodo = ref('')
const hideCompleted = ref(false)
const todos = ref([{ id: id++, text: 'Learn HTML', done: true },{ id: id++, text: 'Learn JavaScript', done: true },{ id: id++, text: 'Learn Vue', done: false }
])const filteredTodos = computed(() => {return hideCompleted.value? todos.value.filter((t) => !t.done): todos.value
})function addTodo() {todos.value.push({ id: id++, text: newTodo.value, done: false })newTodo.value = ''
}function removeTodo(todo) {todos.value = todos.value.filter((t) => t !== todo)
}
</script><template><form @submit.prevent="addTodo"><input v-model="newTodo"><button>Add Todo</button></form><ul><li v-for="todo in filteredTodos" :key="todo.id"><input type="checkbox" v-model="todo.done"><span :class="{ done: todo.done }">{{ todo.text }}</span><button @click="removeTodo(todo)">X</button></li></ul><button @click="hideCompleted = !hideCompleted">{{ hideCompleted ? 'Show all' : 'Hide completed' }}</button>
</template><style>
.done {text-decoration: line-through;
}
</style>

8.生命周期和模板引用(onMounted、ref=)

 要在挂载之后执行代码,我们可以使用 onMounted() 函数

例:

尝试添加一个 onMounted 钩子,然后通过 pElementRef.value 访问 <p>,并直接对其执行一些 DOM 操作。(例如修改它的 textContent)。

<script setup>
import { ref, onMounted } from 'vue'const pElementRef = ref(null)onMounted(() => {pElementRef.value.textContent = 'mounted!'
})
</script><template><p ref="pElementRef">hello</p>
</template>

 结果解释:

给定的代码是使用该语法的 Vue 3 单文件组件 (SFC)。以下是它的功能的细分:<script setup>

  1. 该语句从 'vue' 包导入必要的函数。这些函数用于创建反应式引用和处理组件生命周期事件。

  2. 常量是使用该函数创建的。它将引用初始化为 。

  3. 调用该函数,该函数设置在 DOM 中挂载组件时要执行的回调。在这种情况下,回调函数将 的文本内容设置为“mounted!

  4. 该部分包含组件的 HTML 模板。在模板内部,有一个带有属性的元素。此属性将引用绑定到元素,允许操作其属性。

挂载组件时,会触发回调,并将 引用的元素的文本内容设置为“mounted!因此,渲染的输出将显示“mounted!”而不是“hello”。

9.侦听器(watch())

有时我们需要响应性地执行一些“副作用”——例如,当一个数字改变时将其输出到控制台。我们可以通过侦听器来实现它:

watch() 可以直接侦听一个 ref,并且只要 count 的值改变就会触发回调

例:

<script setup>
import { ref, watch } from 'vue'const todoId = ref(1)
const todoData = ref(null)async function fetchData() {todoData.value = nullconst res = await fetch(`https://jsonplaceholder.typicode.com/todos/${todoId.value}`)todoData.value = await res.json()
}fetchData()watch(todoId, fetchData)
</script><template><p>Todo id: {{ todoId }}</p><button @click="todoId++">Fetch next todo</button><p v-if="!todoData">Loading...</p><pre v-else>{{ todoData }}</pre>
</template>

 代码解释:

  1. 该语句从 'vue' 包导入必要的函数 、 和。 用于创建反应式引用,用于监视反应式引用中的更改,并且是用于发出 HTTP 请求的浏览器 API。
  2. 使用函数创建两个反应式引用:和。 初始值为 1,最初设置为 null。
  3.  定义了一个异步函数,该函数使用当前值从指定的 URL 获取待办事项数据。最初,它设置为 null,提取数据,并使用提取的 JSON 响应进行更新。
  4. 该函数在定义后立即调用,获取初始待办事项数据。
  5. 该函数用于监视反应式引用的变化。每当更改时,都会再次调用该函数以根据更新的值获取新的待办事项数据。
  6. 在该部分中,有一个段落 () 元素显示 的当前值
  7. 存在一个带有事件侦听器的按钮,该按钮在单击时递增值,触发函数并使用更新的
  8. 下一个元素使用该指令有条件地呈现“正在加载...”何时是伪造的(最初或在数据获取过程中)
  9. 在最后一个元素中,该指令用于在元素内呈现,一旦它变得真实,将获取的待办事项数据显示为格式化的JSON对象

10.组件(ChildComp)

真正的 Vue 应用往往是由嵌套组件创建的。

父组件可以在模板中渲染另一个组件作为子组件。要使用子组件,我们需要先导入它:

import ChildComp from './ChildComp.vue'

然后我们就可以在模板中使用组件,就像这样:

<ChildComp />

例:

现在尝试一下导入子组件并在模板中渲染它

<script setup>
import ChildComp from './ChildComp.vue'
</script><template><ChildComp />
</template>

ChildComp.vue

<template><h2>A Child Component!</h2>
</template>

11.Props(使用父组件动态数据defineProps())

子组件可以通过 props 从父组件接受动态数据。首先,需要声明它所接受的 props:

<!-- ChildComp.vue -->
<script setup>
const props = defineProps({msg: String
})
</script>

注意 defineProps() 是一个编译时宏,并不需要导入。一旦声明,msg prop 就可以在子组件的模板中使用。它也可以通过 defineProps() 所返回的对象在 JavaScript 中访问。

父组件可以像声明 HTML attributes 一样传递 props。若要传递动态值,也可以使用 v-bind 语法:

<ChildComp :msg="greeting" />

例:

ChildComp.vue

<script setup>
const props = defineProps({msg: String
})
</script><template><h2>{{ msg || 'No props passed yet' }}</h2>
</template>

父组件:

<script setup>
import { ref } from 'vue'
import ChildComp from './ChildComp.vue'const greeting = ref('Hello from parent')
</script><template><ChildComp :msg="greeting" />
</template>

12.Emits(子组件向父组件触发事件)

除了接收 props,子组件还可以向父组件触发事件:

<script setup>
// 声明触发的事件
const emit = defineEmits(['response'])// 带参数触发
emit('response', 'hello from child')
</script>

emit() 的第一个参数是事件的名称。其他所有参数都将传递给事件监听器。

父组件可以使用 v-on 监听子组件触发的事件——这里的处理函数接收了子组件触发事件时的额外参数并将它赋值给了本地状态:

<ChildComp @response="(msg) => childMsg = msg" />


例:

父组件:

<script setup>
import { ref } from 'vue'
import ChildComp from './ChildComp.vue'const childMsg = ref('No child msg yet')
</script><template><ChildComp @response="(msg) => childMsg = msg" /><p>{{ childMsg }}</p>
</template>

ChildComp.vue

<script setup>
const emit = defineEmits(['response'])emit('response', 'hello from child')
</script><template><h2>Child component</h2>
</template>

13.插槽(slots)

<slot> 插口中的内容将被当作“默认”内容:它会在父组件没有传递任何插槽内容时显示

例:

没有给 <ChildComp> 传递任何插槽内容,所以你将看到默认内容。让我们利用父组件的 msg 状态为子组件提供一些插槽内容

ChildComp.vue

<template><slot>Fallback content</slot>
</template>

父组件:

<script setup>
import { ref } from 'vue'
import ChildComp from './ChildComp.vue'const msg = ref('from parent')
</script><template><ChildComp>Message: {{ msg }}</ChildComp>
</template>

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

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

相关文章

【MySQL】表中的一条数据在磁盘上是如何存放的?

文章目录 1 InnoDB行格式2 COMPACT行格式2.1 记录的额外信息2.2 记录的真实数据 3 Dynamic & Compressed4 VarChar(n)中n的最大取值&#xff1f; 1 InnoDB行格式 不同的存储引擎一般是为实现不同的特性来开发的&#xff0c;真实数据在不同存储引擎中的存放格式一般是不同的…

机器学习基础

什么是机器学习&#xff1f;----本质就是寻找一个函数。 可以训练什么样的函数呢&#xff1f; 可以训练一个回归的函数&#xff0c;也可以训练一个分类的函数。 这个例子的需要分类的类别是19*19的选项。 在机器学习领域里面不止回归和分类。 举例&#xff1a;预测函数 利用已…

Nginx(3)

目录 1.Nginx虚拟主机1.1基于IP虚拟主机1.2基于端口虚拟主机1.3基于域名实现的虚拟主机 2.日志详解 1.Nginx虚拟主机 虚拟主机&#xff0c;Nginx配置中的多个server{}区域对应不同的业务(站点) 虚拟主机方式基于域名的虚拟主机不同的域名访问不同的站点基于IP的虚拟主机不同的…

第一百二十五天学习记录:C++提高:STL-deque容器(下)(黑马教学视频)

deque插入和删除 功能描述&#xff1a; 向deque容器中插入和删除数据 函数原型&#xff1a; 两端插入操作&#xff1a; push_back(elem); //在容器尾部添加一个数据 push_front(elem); //在容器头部插入一个数据 pop_back(); //删除容器最后一个数据 pop_front(); //删除容器…

低成本NFC端口静电保护方案图及ESD二极管选型指南

Near Field Communication&#xff0c;简称&#xff1a;NFC&#xff0c;中文名称&#xff1a;近场通信&#xff0c;是一种短距离高频的无线电技术&#xff0c;能够实现近距离无线通讯和数据交换&#xff0c;是由非接触式射频识别&#xff08;RFID&#xff09;及互连互通技术整合…

微服务学习笔记-基本概念

微服务是一种经过良好架构设计的分布式架构方案。根据业务功能对系统做拆分&#xff0c;每个业务功能模块作为独立项目开发&#xff0c;称为一个服务。 微服务的架构特征&#xff1a; 单一职责&#xff1a;微服务拆分粒度更小&#xff0c;每一个服务都对应唯一的业务能力&…

数据标注对新零售的意义及人工智能在新零售领域的应用?

数据标签对于新零售至关重要&#xff0c;因为它构成了训练和部署人工智能&#xff08;AI&#xff09;和机器学习&#xff08;ML&#xff09;模型的基础。在新零售的背景下&#xff0c;数据标签涉及对数据进行分类、标记或注释以使其能够被机器理解的过程。然后&#xff0c;这些…

Qt应用开发(基础篇)——框架类 QFrame

一、前言 QFrame继承于QWidget&#xff0c;被QLCDNumber、QToolBox、QLabel、QListView等部件继承&#xff0c;是一个拥有矩形框架的基类。 QFrame可以直接创建成一个没有内容的的矩形框架&#xff0c;框架的样式由边框厚度(lineWidth)、框架形状(QFrame::Shape)和阴影样式(QFr…

浏览器多管闲事之跨域

年少时的梦想就是买一台小霸王游戏机 当时的宣传语就是小霸王其乐无穷~。 大些了&#xff0c;攒够了零花钱&#xff0c;在家长的带领下终于买到了 那一刻我感觉就是最幸福的人 风都是甜的&#xff01; 哪成想... 刚到家就被家长扣下了 “”禁止未成年人玩游戏机 (问过卖家了&a…

Transformer理论学习

Transformer出自于论文《attention is all you need》。 一些主流的序列模型主要依赖于复杂的循环结构或者CNN&#xff0c;这里面包含了编解码器等。而Transformer主要的结构是基于注意力机制&#xff0c;而且是用多头注意力机制去替换网络中的循环或者CNN(换言之就是transfor…

CD4029计数器实测仿真及BCD转七段码

前面的博文中&#xff0c;我们介绍过CD40110(这是一个常见的直接接7段数码管的计数器&#xff0c;我们这里介绍一款新的计数器CD4029&#xff0c;这也是很常见的计数器&#xff0c;不同的是后者可以输出BCD编码。 文章目录 一、总体效果二、CD4029的管脚和功能介绍1、芯片功能简…

使用 PowerShell 将 Excel 中的每个工作表单独另存为独立的文件

导语&#xff1a;在日常工作中&#xff0c;我们经常需要处理 Excel 文件。本文介绍了如何使用 PowerShell 脚本将一个 Excel 文件中的每个工作表单独另存为独立的 Excel 文件&#xff0c;以提高工作效率。 1. 准备工作 在开始之前&#xff0c;请确保已经安装了 Microsoft Exc…

【毕业项目】自主设计HTTP

博客介绍&#xff1a;运用之前学过的各种知识 自己独立做出一个HTTP服务器 自主设计WEB服务器 背景目标描述技术特点项目定位开发环境WWW介绍 网络协议栈介绍网络协议栈整体网络协议栈细节与http相关的重要协议 HTTP背景知识补充特点uri & url & urn网址url HTTP请求和…

Pr2022安装插件beat edit安装之后无法加载音乐怎么办?

你运行设置不对&#xff0c;安装好后试试管理员权限运行。 安装好插件后点击上方的窗口&#xff0c;然后再在里面找到扩展&#xff0c;继续点开里面有个BeatEdit&#xff0c;就是插件本身&#xff0c;点开。先选择一个加载音乐的选项&#xff0c;载入音乐先。这个时候可以按下…

CSS 滚动条

一、滚动条样式属性 ::-webkit-scrollbar {width: 6px; /* 竖向滚动条宽度 */height: 6px; /* 横向滚动条高度 */ }::-webkit-scrollbar-thumb {border-radius: 10px; /* 滚动条样式 */-webkit-box-shadow: inset 0 0 3px red; /* 内阴影 */background-color: blue; /* 滚动条…

Redhat Linux 安装MySQL安装手册

Redhat安装MySQL安装手册 1 下载2 上传服务器、解压并安装3 安装安装过程1&#xff1a;MySQL-shared-5.6.51-1.el7.x86_64.rpm安装过程2&#xff1a;MySQL-shared-compat-5.6.51-1.el7.x86_64.rpm安装过程3&#xff1a;MySQL-server-5.6.51-1.el7.x86_64.rpm安装过程4&#xff…

Flutter运行app时向logcat输出当前打开的界面路径且点击可跳转

当一个项目大了目录文件多了&#xff0c;我们往往会为了找到一个文件花费大量的时间和精力&#xff0c;为了快捷方便的调试我们的项目&#xff0c;我们往往需要在打开app运行的时候需要知道当前打开的界面的文件在哪儿&#xff0c;我们这个代码就能快捷的知道我们app正在打开的…

spring-cache框架使用笔记

spring-cache框架使用笔记 什么是spring-cache框架 spring-cache是spring框架中的一个缓存抽象层&#xff0c; 它提供了一种简便的方式来集成不同的底层缓存实现&#xff0c; 如内存缓存(concurrentMap/ehcache/caffeine)/分布式缓存(redis/couchbase)等 它简化了在app中使用…

现代C++中的从头开始深度学习【1/8】:基础知识

一、说明 提及机器学习框架与研究和工业的相关性。现在很少有项目不使用Google TensorFlow或Meta PyTorch&#xff0c;在于它们的可扩展性和灵活性。也就是说&#xff0c;花时间从头开始编码机器学习算法似乎违反直觉&#xff0c;即没有任何基本框架。然而&#xff0c;事实并非…

Unity制作护盾——2、力场冲击波护盾

Unity制作力场护盾 大家好&#xff0c;我是阿赵。   继续做护盾&#xff0c;这一期做一个力场冲击波护盾。 一、效果展示 主要的效果并不是这个球&#xff0c;而是护盾在被攻击的时候&#xff0c;会出现一个扩散的冲击波。比如上图在右边出现了冲击波 如果在左边被攻击&am…