Vue.js前端框架教程3:Vue setup语法糖和异步操作

server/2024/12/23 0:23:36/

文章目录

        • script setup
          • 基本语法
          • 使用 Composition API
          • 组件定义
          • 使用生命周期钩子
          • 模板引用
          • 使用 `defineProps` 和 `defineEmits`
          • 组合多个 `<script setup>` 标签
        • Vue异步操作
          • 1. 使用 `async` 和 `await`
          • 2. 使用 Promise
          • 3. 在 `created` 或 `mounted` 钩子中执行异步操作
          • 4. 使用 `watch` 或 `watchEffect` 监听数据变化
          • 5. 使用 Composition API 的 `useAsync`

script setup

<script setup>Vue 3 中引入的一种新的组件语法糖,它提供了一种更简洁和更少样板代码的方式来编写组件。使用 <script setup>,你可以直接在 <script> 标签中使用 setup 函数中的代码,而不需要显式地定义 setup 函数。这种方式使得组件的逻辑更加集中和清晰。

以下是 <script setup> 的基本用法:

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

在这个例子中,count 是一个响应式引用,increment 是一个方法,它们都可以直接在模板中使用,无需在 setup 函数中返回。

使用 Composition API

<script setup>Vue 3Composition API 配合得非常好,你可以轻松地使用 refreactivecomputed 等响应式 API

<script setup>
import { ref, computed } from 'vue';const firstName = ref('John');
const lastName = ref('Doe');const fullName = computed(() => `${firstName.value} ${lastName.value}`);
</script><template><p>{{ fullName }}</p>
</template>
组件定义

<script setup> 中,你也可以定义组件,并且它们会自动注册到当前组件中。

<script setup>
import MyComponent from './MyComponent.vue';
</script><template><my-component />
</template>
使用生命周期钩子

<script setup> 也支持生命周期钩子,如 onMountedonUpdated 等。

<script setup>
import { onMounted } from 'vue';onMounted(() => {console.log('组件已挂载');
});
</script>
模板引用

<script setup> 中,模板引用(如 ref 定义的响应式变量)可以直接在模板中使用。

<script setup>
import { ref } from 'vue';const inputRef = ref(null);
</script><template><input :value="inputRef" @input="inputRef = $event.target.value" />
</template>
使用 definePropsdefineEmits

对于 propsemits<script setup> 提供了 definePropsdefineEmits 宏,使得定义更加简洁。

<script setup>
const props = defineProps(['title']);
const emit = defineEmits(['update']);
</script><template><button @click="emit('update', props.title)">更新标题</button>
</template>
组合多个 <script setup> 标签

如果你的组件非常大,你可以将逻辑分割到多个 <script setup> 标签中。

<script setup>
// Part 1: Feature A
import { ref } from 'vue';
const featureA = ref(0);
</script><script setup>
// Part 2: Feature B
import { computed } from 'vue';
const featureB = computed(() => `Feature B: ${featureA.value}`);
</script><template><div>{{ featureB }}</div>
</template>

<script setup>Vue 3 中一个非常强大的特性,它使得组件的编写更加简洁和模块化,同时也提高了开发效率。

Vue异步操作

Vue 前端框架>前端框架中,异步操作通常是必不可少的,尤其是在处理网络请求、定时任务、延迟操作等场景。Vue 提供了几种处理异步操作的方法,以下是一些常见的异步处理方式:

1. 使用 asyncawait

Vue 支持在组件的方法中使用 asyncawait 语法,这使得异步代码的编写更加直观和易于理解。

<template><button @click="handleClick">点击我</button>
</template><script>
export default {methods: {async handleClick() {try {const response = await fetch('/api/data');const data = await response.json();console.log(data);} catch (error) {console.error('请求失败:', error);}}}
}
</script>
2. 使用 Promise

Vue 中,你可以使用 Promise 来处理异步操作,并通过 .then().catch() 方法来处理成功和失败的情况。

<template><button @click="handleClick">点击我</button>
</template><script>
export default {methods: {handleClick() {fetch('/api/data').then(response => response.json()).then(data => {console.log(data);}).catch(error => {console.error('请求失败:', error);});}}
}
</script>
3. 在 createdmounted 钩子中执行异步操作

Vue 组件的生命周期钩子中,你可以执行异步操作,例如在组件创建后或挂载后立即获取数据。

<template><div>{{ message }}</div>
</template><script>
export default {data() {return {message: ''};},created() {fetch('/api/data').then(response => response.json()).then(data => {this.message = data.message;}).catch(error => {console.error('请求失败:', error);});}
}
</script>
4. 使用 watchwatchEffect 监听数据变化

Vue 3 中,watchwatchEffect 是响应式 API,可以用来监听数据的变化,并在变化时执行异步操作。

<script setup>
import { ref, watch } from 'vue';const data = ref(null);watch(data, async (newValue, oldValue) => {if (newValue !== oldValue) {const response = await fetch(`/api/data/${newValue}`);const result = await response.json();console.log(result);}
});
</script>
5. 使用 Composition API 的 useAsync

Vue 3 中,你可以使用 Composition API 提供的 useAsync 组合函数来处理异步操作,这使得代码更加模块化和可重用。

<script setup>
import { ref, computed } from 'vue';
import { useAsync } from '@vueuse/core';const fetchData = (id) => fetch(`/api/data/${id}`).then(res => res.json());const { result, error, loading } = useAsync(() => fetchData(1), { immediate: true });console.log(result, error, loading);
</script>

这些方法可以帮助你在 Vue 前端应用中有效地处理异步操作,提高应用的响应性和用户体验。


http://www.ppmy.cn/server/152355.html

相关文章

24届FPGA秋招经验分享

学员客户&#xff1a;首先自我介绍一下&#xff0c;我本科就读于一所985高校&#xff0c;专业是电子信息工程&#xff0c;硕士阶段则专注于FPGA方向的研究。虽然有着相对扎实的理论基础&#xff0c;但在秋招过程中&#xff0c;我仍然遇到了不少挑战。以下是我结合自己的亲身经历…

单元测试使用记录

什么是单元测试 简单来说就是对一个类中的方法进行测试&#xff0c;对输出的结果检查判断是否符合预期结果 但是在多年的工作中&#xff0c;从来没有哪个项目中真正系统的用到了单元测试&#xff0c;因此对它还是很陌生的&#xff0c;也就造成更加不会在项目中区使用它。 如何…

深入解析 `DataFrame.groupby` 和 `agg` 的用法及使用场景

深入解析 DataFrame.groupby 和 agg 的用法及使用场景 1. groupby 的基本用法语法&#xff1a;示例&#xff1a; 2. agg 的基本用法语法&#xff1a;示例&#xff1a; 3. first、sum、lambda 的用法3.1 first示例&#xff1a; 3.2 sum示例&#xff1a; 3.3 lambda示例&#xff…

apache的常见报错

文章目录 一、httpd -k install -n Apache输入后&#xff0c;提示拒绝访问怎么办解决方案 二、命令行输入&#xff1a;httpd -t 报错解决方案 三、httpd -k install -n Apache输入后&#xff0c;另外一种报错解决方案测试是否成功 四、路径问题引起报错解决方案 一、httpd -k i…

STM32F407寄存器点灯

背景描述&#xff1a; 最近用32开发遇到问题不得不看寄存器了&#xff0c;就回顾了一下寄存器手册的查看方式和寄存器的使用方法&#xff1b; 上一次这么细致的记录还是在刚学习STM32的时候&#xff0c;之前觉得看寄存器手册以及配置寄存器是有点难度的事情&#xff0c;现在回头…

SEO初学者-搜索引擎如何工作

搜索引擎基础搜索引擎是如何建立索引的搜索引擎如何对网页进行排名搜索引擎是如何个性化搜索结果的 搜索引擎的工作方式是使用网络爬虫抓取数十亿个页面。爬虫也称为蜘蛛或机器人&#xff0c;它们在网络上导航并跟踪链接以查找新页面。然后&#xff0c;这些页面会被添加到搜索引…

2024年12月陪玩系统-仿东郊到家约玩系统是一种新兴的线上预约线下社交、陪伴系统分享-优雅草央千澈-附带搭建教程

2024年12月陪玩系统-仿东郊到家约玩系统是一种新兴的线上预约线下社交、陪伴系统分享-优雅草央千澈-附带搭建教程 产品介绍 仿东郊到家约玩系统是一种新兴的线上预约&#xff0c;线下社交、陪伴、助娱、助攻、分享、解答、指导等服务模式&#xff0c;范围涉及电竞、运动、音乐…

变量的作用域和生命周期

作用域 作用域是程序设计概念&#xff0c;通常来说&#xff0c;一段程序代码中所用到的名字并不总是有效的&#xff0c;而限定这个名字的可用性的代码范围就是这个名字的作用域。 1、局部变量的作用域就是变量所在的局部范围。 2、全局变量的作用域是整个工程。 问题&#…