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

文章目录

        • [script setup](#script setup)
        • Vue异步操作
          • [1. 使用 `async` 和 `await`](#1. 使用 async 和 await)
          • [2. 使用 Promise](#2. 使用 Promise)
          • [3. 在 `created` 或 `mounted` 钩子中执行异步操作](#3. 在 created 或 mounted 钩子中执行异步操作)
          • [4. 使用 `watch` 或 `watchEffect` 监听数据变化](#4. 使用 watch 或 watchEffect 监听数据变化)
          • [5. 使用 Composition API 的 `useAsync`](#5. 使用 Composition API 的 useAsync)
script setup

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

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

基本语法
html 复制代码
<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 3 的 Composition API 配合得非常好,你可以轻松地使用 ref、reactive、computed 等响应式 API。

html 复制代码
<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> 中,你也可以定义组件,并且它们会自动注册到当前组件中。

html 复制代码
<script setup>
import MyComponent from './MyComponent.vue';
</script>

<template>
  <my-component />
</template>
使用生命周期钩子

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

html 复制代码
<script setup>
import { onMounted } from 'vue';

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

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

html 复制代码
<script setup>
import { ref } from 'vue';

const inputRef = ref(null);
</script>

<template>
  <input :value="inputRef" @input="inputRef = $event.target.value" />
</template>
使用 defineProps 和 defineEmits

对于 props 和 emits,<script setup> 提供了 defineProps 和 defineEmits 宏,使得定义更加简洁。

vue 复制代码
<script setup>
const props = defineProps(['title']);
const emit = defineEmits(['update']);
</script>

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

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

html 复制代码
<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. 使用 async 和 await

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

javascript 复制代码
<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() 方法来处理成功和失败的情况。

javascript 复制代码
<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. 在 created 或 mounted 钩子中执行异步操作

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

javascript 复制代码
<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. 使用 watch 或 watchEffect 监听数据变化

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

javascript 复制代码
<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 组合函数来处理异步操作,这使得代码更加模块化和可重用。

javascript 复制代码
<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 前端应用中有效地处理异步操作,提高应用的响应性和用户体验。

相关推荐
变与不变8062 分钟前
css定位布局精讲
前端·css
LHICOD8 分钟前
Linux-2
java·linux·后端·jar·vmware·svm·vm
余额瞒着我当琳14 分钟前
Linux初识:Linux的历史,计算机的发展脉络,发行版本,选购云服务器,安装Xshell,第一次连接,基础命令指南
linux·运维·服务器
FRing0325 分钟前
JavaScript入门到精通三十三(异常处理、call方法、apply方法、bind方法、防抖、节流)
开发语言·前端·javascript
时间售卖铺33 分钟前
Docker实战:一键部署轻量级容器
运维·docker·云原生
垆边人似月.37 分钟前
RDMA 文件传输踩坑(四):从固定延时改造为 READY/ACK 协议
linux·服务器·网络
水饺编程39 分钟前
第2章:Linux 基础,制作【.tar.xz】压缩包文件
linux·c语言·汇编
山乐1913143 分钟前
麒麟系统,安装Nginx并配置https证书
运维·nginx·https
月落汀兰1 小时前
拒绝配置写死镜像!K8s 存储卷与配置管理,PV/PVC、ConfigMap、Secret 实战避坑指南
运维·kubernetes
阿里云基础软件1 小时前
Agent 任务提速 10.71%,内存占用降低 21.60%|Alibaba Cloud Linux 4 重大发布
java·linux·人工智能·操作系统·agent