前端教程:如何写 Vue 3 页面

news2024/11/19 10:10:39

如何写 Vue 3 页面

目录

  1. 引言
  2. Vue 3 概述
    • 2.1 Vue 3 的新特性
    • 2.2 Vue 3 的安装
  3. 创建 Vue 3 项目
    • 3.1 使用 Vue CLI 创建项目
    • 3.2 使用 Vite 创建项目
  4. Vue 3 组件基础
    • 4.1 组件的定义与注册
    • 4.2 组件的生命周期
  5. Vue 3 的响应式系统
    • 5.1 响应式数据
    • 5.2 计算属性
    • 5.3 侦听器
  6. Vue 3 的组合 API
    • 6.1 setup 函数
    • 6.2 ref 和 reactive
    • 6.3 自定义组合函数
  7. Vue 3 路由
    • 7.1 安装 Vue Router
    • 7.2 配置路由
    • 7.3 路由守卫
  8. Vue 3 状态管理
    • 8.1 安装 Vuex
    • 8.2 创建 Store
    • 8.3 使用 Store
  9. Vue 3 的样式处理
    • 9.1 内联样式与 CSS 类
    • 9.2 Scoped 样式
    • 9.3 CSS Modules
  10. Vue 3 的测试
    • 10.1 单元测试
    • 10.2 端到端测试
  11. 总结

引言

Vue.js 是一个流行的前端框架,广泛用于构建用户界面和单页应用程序。Vue 3 是其最新版本,带来了许多新特性和改进。本教程将详细介绍如何使用 Vue 3 创建页面,从基础知识到高级特性,帮助你快速上手。

Vue 3 概述

Vue 3 的新特性

Vue 3 引入了一些重要的新特性,包括:

  • 组合 API:提供了一种更灵活的方式来组织组件逻辑。
  • 性能提升:相较于 Vue 2,Vue 3 在性能上有显著提升。
  • 更好的 TypeScript 支持:Vue 3 对 TypeScript 的支持更加完善。
  • Fragment:允许组件返回多个根节点。

Vue 3 的安装

要使用 Vue 3,你需要确保你的开发环境中安装了 Node.js 和 npm。可以通过以下命令检查:

node -v
npm -v

如果未安装,可以前往 Node.js 官网 下载并安装。

创建 Vue 3 项目

使用 Vue CLI 创建项目

Vue CLI 是一个强大的工具,可以帮助你快速创建 Vue 项目。以下是使用 Vue CLI 创建 Vue 3 项目的步骤:

  1. 安装 Vue CLI:
    npm install -g @vue/cli
    
  2. 创建新项目:
    vue create my-vue3-app
    
  3. 选择 Vue 3 配置。

使用 Vite 创建项目

Vite 是一个新兴的构建工具,支持快速开发和构建。使用 Vite 创建 Vue 3 项目的步骤如下:

  1. 安装 Vite:
    npm create vite@latest my-vue3-app --template vue
    
  2. 进入项目目录并安装依赖:
    cd my-vue3-app
    npm install
    
  3. 启动开发服务器:
    npm run dev
    

Vue 3 组件基础

组件的定义与注册

在 Vue 中,组件是构建用户界面的基本单元。以下是定义和注册组件的示例:

// HelloWorld.vue
<template>
  <h1>Hello, {{ name }}!</h1>
</template>

<script>
export default {
  props: {
    name: String
  }
}
</script>

在父组件中注册:

<template>
  <HelloWorld name="Vue 3" />
</template>

<script>
import HelloWorld from './HelloWorld.vue';

export default {
  components: {
    HelloWorld
  }
}
</script>

组件的生命周期

Vue 组件有一系列生命周期钩子,可以在组件的不同阶段执行代码。常用的生命周期钩子包括:

  • created:组件实例被创建后调用。
  • mounted:组件挂载到 DOM 后调用。
  • updated:组件更新后调用。
  • beforeDestroy:组件销毁前调用。

示例:

export default {
  data() {
    return {
      message: 'Hello Vue!'
    }
  },
  created() {
    console.log('Component created');
  },
  mounted() {
    console.log('Component mounted');
  }
}

Vue 3 的响应式系统

响应式数据

Vue 3 的响应式系统基于 Proxy 实现,提供了更好的性能和灵活性。可以使用 refreactive 创建响应式数据。

import { ref, reactive } from 'vue';

const count = ref(0);
const state = reactive({ name: 'Vue 3' });

计算属性

计算属性是基于响应式数据计算得出的值,只有在依赖的响应式数据变化时才会重新计算。

import { computed } from 'vue';

const fullName = computed(() => `${state.firstName} ${state.lastName}`);

侦听器

侦听器用于观察响应式数据的变化,并在变化时执行特定的操作。

import { watch } from 'vue';

watch(count, (newValue, oldValue) => {
  console.log(`Count changed from ${oldValue} to ${newValue}`);
});

Vue 3 的组合 API

setup 函数

setup 函数是组合 API 的核心,所有的响应式状态和计算属性都在这里定义。

export default {
  setup() {
    const count = ref(0);
    const increment = () => count.value++;

    return { count, increment };
  }
}

ref 和 reactive

  • ref 用于创建基本数据类型的响应式引用。
  • reactive 用于创建对象的响应式状态。
const count = ref(0);
const state = reactive({ name: 'Vue 3' });

自定义组合函数

可以将逻辑提取到自定义组合函数中,以便在多个组件中复用。

function useCounter() {
  const count = ref(0);
  const increment = () => count.value++;
  return { count, increment };
}

Vue 3 路由

安装 Vue Router

使用 Vue Router 进行页面导航。首先安装 Vue Router:

npm install vue-router

配置路由

在项目中配置路由:

import { createRouter, createWebHistory } from 'vue-router';
import Home from './views/Home.vue';
import About from './views/About.vue';

const routes = [
  { path: '/', component: Home },
  { path: '/about', component: About }
];

const router = createRouter({
  history: createWebHistory(),
  routes
});

export default router;

路由守卫

路由守卫用于控制路由访问权限,可以在路由配置中添加守卫。

router.beforeEach((to, from, next) => {
  if (to.meta.requiresAuth && !isAuthenticated) {
    next({ path: '/login' });
  } else {
    next();
  }
});

Vue 3 状态管理

安装 Vuex

Vuex 是 Vue 的状态管理库,安装 Vuex:

npm install vuex

创建 Store

创建一个 Vuex Store 来管理应用的状态。

import { createStore } from 'vuex';

const store = createStore({
  state: {
    count: 0
  },
  mutations: {
    increment(state) {
      state.count++;
    }
  }
});

使用 Store

在组件中使用 Vuex Store:

import { useStore } from 'vuex';

export default {
  setup() {
    const store = useStore();
    const increment = () => store.commit('increment');

    return { increment };
  }
}

Vue 3 的样式处理

内联样式与 CSS 类

可以使用内联样式和 CSS 类来控制组件的样式。

<template>
  <div :style="{ color: active ? 'red' : 'blue' }">
    Hello World
  </div>
</template>

Scoped 样式

使用 scoped 样式可以确保样式只应用于当前组件。

<style scoped>
h1 {
  color: blue;
}
</style>

CSS Modules

CSS Modules 允许你使用局部作用域的 CSS 类。

<template>
  <div :class="$style.myClass">Hello World</div>
</template>

<style module>
.myClass {
  color: green;
}
</style>

Vue 3 的测试

单元测试

使用 Jest 和 Vue Test Utils 进行单元测试。

import { mount } from '@vue/test-utils';
import HelloWorld from '@/components/HelloWorld.vue';

test('renders props.msg when passed', () => {
  const msg = 'new message';
  const wrapper = mount(HelloWorld, {
    props: { msg }
  });
  expect(wrapper.text()).toMatch(msg);
});

端到端测试

使用 Cypress 进行端到端测试。

describe('My First Test', () => {
  it('Visits the app root url', () => {
    cy.visit('/');
    cy.contains('Hello World');
  });
});

总结

本教程详细介绍了如何使用 Vue 3 创建页面,从基础知识到高级特性。通过学习组件、响应式系统、组合 API、路由、状态管理、样式处理和测试等内容,你将能够构建出功能强大的 Vue 3 应用。希望这篇教程能帮助你更好地理解和使用 Vue 3。

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

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

相关文章

栈Stack和队列Queue

目录 一、栈 &#xff08;1&#xff09;用数组实现 &#xff08;2&#xff09;用单链表实现 &#xff08;3&#xff09;用标注尾结点的单链表实现 &#xff08;4&#xff09;用双向链表实现 2、栈的实际应用 &#xff08;1&#xff09;改变元素的序列 &#xff08;2&am…

Tailscale 自建 Derp 中转服务器

文章目录 为什么要建立 Derp 中转服务器&#xff1f;安装 Go 环境通过 Go 安装 Derp处理证书文件自签一个域名启动 DerpIPV6 的支持防止 Derp 被白嫖以上的操作命令合集自建 Headscale 添加 Derp参考 为什么要建立 Derp 中转服务器&#xff1f; Tailscale 使用的算法很有趣: 所…

RPC安全可靠的异常重试

当调用方调用服务提供方&#xff0c;由于网络抖动导致的请求失败&#xff0c;这个请求调用方希望执行成功。 调用方应该如何操作&#xff1f;catch异常再发起一次调用&#xff1f;显然不够优雅。这时可以考虑使用RPC框架的重试机制。 RPC框架的重试机制 RPC重试机制&#xff1…

AutoDL部署视觉大模型llama3.2-vision,从视频中寻找特定目标

注&#xff1a; windows11系统。示例为此项目&#xff1a;https://github.com/win4r/VideoFinder-Llama3.2-vision-Ollama 在当今的人工智能领域&#xff0c;深度学习模型的计算需求日益增长&#xff0c;特别是在处理复杂的视觉任务时&#xff0c;强大的算力往往是实现高效应用…

【大语言模型】ACL2024论文-16 基于地图制图的罗马尼亚自然语言推理语料库的新型课程学习方法

【大语言模型】ACL2024论文-16 基于地图制图的罗马尼亚自然语言推理语料库的新型课程学习方法 目录 文章目录 【大语言模型】ACL2024论文-16 基于地图制图的罗马尼亚自然语言推理语料库的新型课程学习方法目录摘要&#xff1a;研究背景&#xff1a;问题与挑战&#xff1a;如何解…

golang调用模组程序实现交互输入自动化,获取imei及iccid

应用场景&#xff1a;在openwrt下调用移远的测试程序&#xff0c;并实现输入自动话&#xff0c;获取imei rootOpenWrt:~# ql-api-test Test groups:0: ql_dsi1: ql_nw2: ql_sim3: ql_dev4: ql_voice5: ql_sms6: ql_adc7: ql_i2c8: …

【数据分享】2022年我国10米分辨率茶树种植分布栅格数据

小麦、玉米、水稻、茶树等各类农作物的种植分布数据在农业、环境、国土等很多专业都经常用到&#xff01; 本次给大家分享的是我国2022年10米分辨率茶树种植分布栅格数据&#xff01;数据格式为TIFF格式。数据坐标为GCS_WGS_1984。数据格式为TIFF格式。数据坐标为GCS_WGS_1984…

【弱监督视频异常检测】2024-ESWA-基于扩散的弱监督视频异常检测常态预训练

2024-ESWA-Diffusion-based normality pre-training for weakly supervised video anomaly detection 基于扩散的弱监督视频异常检测常态预训练摘要1. 引言2. 相关工作3. 方法论3.1. 使用扩散自动编码器进行常态学习3.2. 全局-局部特征编码器3.2.1 局部块3.2.2 全局块3.2.3 协同…

vue实现展示并下载后端返回的图片流

// 点击下载 downLoadCode() {const image new Image();image.setAttribute("crossOrigin", "anonymous");image.onload () > {const canvas document.createElement("canvas");canvas.width image.width;canvas.height image.height;c…

STL关联式容器之平衡二叉搜索树

平衡二叉搜索树 在STL关联式容器介绍-CSDN博客中对二叉搜索树做了简要的描述&#xff1b;但是因为没有对二叉搜索树对数的深度及插入后树的结构进行调整&#xff0c;二叉搜索树可能失去平衡&#xff0c;造成搜寻效率低落的情况。如下所示&#xff1a; 所谓树形平衡与否&#xf…

Django启用国际化支持(2)—实现界面内切换语言:activate()

文章目录 ⭐注意⭐1. 配置项目全局设置&#xff1a;启用国际化2. 编写视图函数3. 配置路由4. 界面演示5、扩展自动识别并切换到当前语言设置语言并保存到Session设置语言并保存到 Cookie ⭐注意⭐ 以下操作依赖于 Django 项目的国际化支持。如果你不清楚如何启用国际化功能&am…

Java基础——继承和多态

目录 一、继承 继承的定义&#xff1a; 继承的基本用法&#xff1a; 如何调用父类的方法&#xff1f; 二、多态 多态性的好处 多态中的强制类型转换&#xff1a; 包的命名规则——域名倒叙 一、继承 继承的定义&#xff1a; 继承是面向对象编程中的一种机制&#xff0c…

2024-11-17 -MATLAB三维绘图简单实例

1. x -1:0.05:1; y x; [X, Y] meshgrid(x, y); f (X, Y) (sin(pi * X) .* sin(pi * Y)) .^ 2.*sin(2.*X2.*Y); mesh(X, Y, f(X, Y)); % 调用函数f并传递X和Y xlabel(X-axis); ylabel(Y-axis); zlabel(Z-axis); title(Surface Plot of (sin(pi * X) .* sin(pi * Y)) .^ 2.*…

resnet50,clip,Faiss+Flask简易图文搜索服务

一、实现 文件夹目录结构&#xff1a; templates -----upload.html faiss_app.py 前端代码&#xff1a; <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widt…

Flink监控checkpoint

Flink的web界面提供了一个选项卡来监控作业的检查点。这些统计信息在任务终止后也可用。有四个选项卡可以显示关于检查点的信息:概述(Overview)、历史(History)、摘要(Summary)和配置(Configuration)。下面依次来看这几个选项。 Overview Tab Overview选项卡列出了以…

如何用Excel批量提取文件夹内所有文件名?两种简单方法推荐

在日常办公中&#xff0c;我们有时需要将文件夹中的所有文件名整理在Excel表格中&#xff0c;方便管理和查阅。手动复制文件名既费时又易出错&#xff0c;因此本文将介绍两种利用Excel自动提取文件夹中所有文件名的方法&#xff0c;帮助你快速整理文件信息。 方法一&#xff1…

微信小程序-prettier 格式化

一.安装prettier插件 二.配置开发者工具的设置 配置如下代码在setting.json里&#xff1a; "editor.formatOnSave": true,"editor.defaultFormatter": "esbenp.prettier-vscode","prettier.documentSelectors": ["**/*.wxml"…

Debezium日常分享系列之:Debezium3版本Debezium connector for JDBC

Debezium日常分享系列之&#xff1a;Debezium3版本Debezium connector for JDBC 概述JDBC连接器的工作原理消费复杂的Debezium变更事件至少一次的传递多个任务数据和列类型映射主键处理删除模式幂等写入模式演化引用和大小写敏感性连接空闲超时数据类型映射部署Debezium JDBC连…

前端页面自适应等比例缩放 Flexible+rem方案

在移动互联网时代&#xff0c;随着智能手机和平板电脑的普及&#xff0c;前端开发者面临的一个重要挑战是如何让网页在不同尺寸和分辨率的设备上都能良好地显示。为了应对这一挑战&#xff0c;阿里巴巴的前端团队开发了 flexible.js&#xff0c;旨在提供一种简单有效的解决方案…

Argo workflow 拉取git 并使用pvc共享文件

文章目录 拉取 Git 仓库并读取文件使用 Kubernetes Persistent Volumes&#xff08;通过 volumeClaimTemplates&#xff09;以及任务之间如何共享数据 拉取 Git 仓库并读取文件 在 Argo Workflows 中&#xff0c;如果你想要一个任务拉取 Git 仓库中的文件&#xff0c;另一个任…