使用 Vue 3 + TypeScript + Vant 4 构建现代移动端应用

1. 引言

1.1 项目背景

随着移动互联网的发展,移动端应用的需求日益增长。Vue 3 提供了强大的响应式数据绑定和组件化开发能力,TypeScript 提供了类型安全,而 Vant 4 是一个轻量级、可靠的移动端 UI 库。本文将详细介绍如何使用 Vue 3 + TypeScript + Vant 4 构建现代移动端应用。

1.2 技术栈介绍

1.2.1 Vue 3

Vue 3 是 Vue.js 的最新版本,提供了更好的性能、更小的体积和更丰富的功能,如组合式 API、更好的 TypeScript 支持等。

1.2.2 TypeScript

TypeScript 是 JavaScript 的超集,提供了静态类型检查、类型推断等功能,有助于提高代码的可维护性和可读性。

1.2.3 Vant 4

Vant 4 是一个轻量级、可靠的移动端 UI 库,提供了丰富的组件和主题定制能力,适用于构建高性能的移动端应用。

2. 环境准备

2.1 安装 Node.js 和 npm

确保你的系统上安装了 Node.js 和 npm。可以通过以下命令检查是否已安装:

node -v
npm -v

2.2 创建 Vue 3 项目

使用 Vue CLI 创建一个新的 Vue 3 项目:

npm install -g @vue/cli
vue create my-mobile-app
cd my-mobile-app

在创建过程中选择 Vue 3 和 TypeScript 支持。

2.3 集成 TypeScript

在创建项目时选择 TypeScript 支持,Vue CLI 会自动配置 TypeScript。

2.4 安装 Vant 4

安装 Vant 4 及其 TypeScript 类型定义:

npm install vant@next
npm install @types/vant@next --save-dev

3. 项目结构

3.1 基本目录结构

my-mobile-app/
├── public/
│   ├── index.html
├── src/
│   ├── assets/
│   ├── components/
│   ├── router/
│   ├── store/
│   ├── views/
│   ├── App.vue
│   ├── main.ts
├── package.json
├── tsconfig.json
├── vue.config.js

3.2 主要文件介绍

  • public/index.html: 应用的入口 HTML 文件。
  • src/main.ts: 应用的入口文件,初始化 Vue 实例。
  • src/App.vue: 应用的根组件。
  • src/router/index.ts: 路由配置文件。
  • src/store/index.ts: 状态管理配置文件。
  • src/components/: 存放可复用的组件。
  • src/views/: 存放页面组件。

4. 基本配置

4.1 配置 TypeScript

确保 tsconfig.json 配置正确:

{"compilerOptions": {"target": "esnext","module": "esnext","strict": true,"jsx": "preserve","importHelpers": true,"moduleResolution": "node","experimentalDecorators": true,"skipLibCheck": true,"esModuleInterop": true,"allowSyntheticDefaultImports": true,"sourceMap": true,"baseUrl": ".","types": ["webpack-env"],"paths": {"@/*": ["src/*"]},"lib": ["esnext","dom","dom.iterable","scripthost"]},"include": ["src/**/*.ts","src/**/*.tsx","src/**/*.vue"],"exclude": ["node_modules"]
}

4.2 配置 Vant 4

main.ts 中引入 Vant 4:

import { createApp } from 'vue';
import App from './App.vue';
import router from './router';
import store from './store';
import Vant from 'vant';
import 'vant/lib/index.css';const app = createApp(App);
app.use(router);
app.use(store);
app.use(Vant);
app.mount('#app');

4.3 配置路由

src/router/index.ts 中配置路由:

import { createRouter, createWebHistory, RouteRecordRaw } from 'vue-router';
import Home from '../views/Home.vue';const routes: Array<RouteRecordRaw> = [{path: '/',name: 'Home',component: Home},{path: '/about',name: 'About',component: () => import('../views/About.vue')}
];const router = createRouter({history: createWebHistory(process.env.BASE_URL),routes
});export default router;

4.4 配置状态管理 (Vuex)

src/store/index.ts 中配置 Vuex:

import { createStore } from 'vuex';export default createStore({state: {count: 0},mutations: {increment(state) {state.count++;}},actions: {increment({ commit }) {commit('increment');}},modules: {}
});

5. 组件开发

5.1 创建基础组件

src/components/ 目录下创建一个基础组件 HelloWorld.vue

<template><div class="hello"><h1>{{ msg }}</h1></div>
</template><script lang="ts">
import { defineComponent } from 'vue';export default defineComponent({name: 'HelloWorld',props: {msg: {type: String,required: true}}
});
</script><style scoped>
.hello {text-align: center;
}
</style>

5.2 使用 Vant 4 组件

src/views/Home.vue 中使用 Vant 4 组件:

<template><div class="home"><van-button type="primary" @click="increment">Increment</van-button><p>Count: {{ count }}</p></div>
</template><script lang="ts">
import { defineComponent, computed } from 'vue';
import { useStore } from 'vuex';export default defineComponent({name: 'Home',setup() {const store = useStore();const count = computed(() => store.state.count);const increment = () => {store.dispatch('increment');};return {count,increment};}
});
</script><style scoped>
.home {text-align: center;margin-top: 60px;
}
</style>

5.3 自定义组件

src/components/ 目录下创建一个自定义组件 CustomButton.vue

<template><van-button :type="type" @click="handleClick"><slot></slot></van-button>
</template><script lang="ts">
import { defineComponent } from 'vue';export default defineComponent({name: 'CustomButton',props: {type: {type: String,default: 'default'}},emits: ['click'],setup(props, { emit }) {const handleClick = () => {emit('click');};return {handleClick};}
});
</script><style scoped>
.van-button {margin: 10px;
}
</style>

6. 样式管理

6.1 使用 CSS 预处理器 (Sass/SCSS)

src/assets/styles/ 目录下创建一个全局样式文件 _variables.scss

$primary-color: #1989fa;
$secondary-color: #64b587;

src/assets/styles/main.scss 中引入全局样式:

@import './variables.scss';body {background-color: #f5f5f5;color: #333;
}.van-button {background-color: $primary-color;border-color: $primary-color;
}

main.ts 中引入全局样式:

import { createApp } from 'vue';
import App from './App.vue';
import router from './router';
import store from './store';
import Vant from 'vant';
import 'vant/lib/index.css';
import './assets/styles/main.scss';const app = createApp(App);
app.use(router);
app.use(store);
app.use(Vant);
app.mount('#app');

6.2 使用 CSS 框架 (Vant 4 样式)

Vant 4 提供了丰富的样式和主题定制能力。确保在 main.ts 中引入 Vant 的样式文件:

import 'vant/lib/index.css'

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

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

相关文章

html-表格标签

一、表格标签 1. 表格的主要作用 表格主要用于显示&#xff64;展示数据,因为它可以让数据显示的非常的规整,可读性非常好&#xff61;特别是后台展示数据 的时候,能够熟练运用表格就显得很重要&#xff61;一个清爽简约的表格能够把繁杂的数据表现得很有条理&#xff61; 总…

ROS2-话题学习

强烈推荐教程&#xff1a; 《ROS 2机器人开发从入门到实践》3.2.2订阅小说并合成语音_哔哩哔哩_bilibili 构建功能包 # create package demo_python_pkg ros2 pkg create --build-type ament_python --license Apache-2.0 demo_python_pkg 自己写的代码放在./demo_python_pkg/…

Java在小米SU7 Ultra汽车中的技术赋能

目录 一、智能驾驶“大脑”与实时数据 场景一&#xff1a;海量数据的分布式计算 场景二&#xff1a;实时决策的毫秒级响应 场景三&#xff1a;弹性扩展与容错机制 技术隐喻&#xff1a; 二、车载信息系统&#xff08;IVI&#xff09;的交互 场景一&#xff1a;Android Automo…

Oracle RAC配置原理详解:构建高可用与高性能的数据库集群

在现代企业级应用中&#xff0c;数据库的高可用性和高性能是至关重要的。Oracle Real Application Clusters&#xff08;RAC&#xff09;是Oracle数据库提供的一种集群解决方案&#xff0c;能够将多个数据库实例部署在不同的服务器上&#xff0c;实现负载均衡和故障切换&#x…

ESP8266TCP客户端(单连接TCP Client)

单连接TCP Client 电脑作为服务器&#xff0c;8266作为客户端 1.配置WiFi模式 ATCWMODE3 //softAPstation mode 相应&#xff1a;ok 2.连接路由器 ATCWJAP“SSID”&#xff0c;“password” //SSID就是wifi的名字&#xff0c; password WIFI密码 响应&#xff…

【Linux】软硬连接与动静态库

&#x1f525;个人主页&#xff1a;Quitecoder &#x1f525;专栏&#xff1a;linux笔记仓 目录 01.软硬连接02.动静态库静态库&#xff08;Static Library&#xff09;动态库&#xff08;Dynamic Library&#xff09; 03.动态库加载 01.软硬连接 我们先看一下它的用法 这个是…

关于Springboot 应配置外移和Maven个性化打包一些做法

期望达到的效果是每次更新服务器端应用只需要更新主程序jar 依赖jar单独分离。配置文件独立存放于文件夹内&#xff0c;更新程序并不会覆盖已有的配置信息。 一、配置外移 1、开发环境外移 做法&#xff1a;在项目同级或者上级创建config文件夹放置配置文件&#xff0c;具体m…

阿里云操作系统控制台——解决服务器磁盘I/O故障

目录 引言 需求介绍 操作系统使用实例 获得的帮助与提升 建议 引言 你的云服务器是否遇到过系统响应变慢、服务超时&#xff0c;或者进程卡顿、磁盘空间不足、系统日志频繁告警的问题&#xff1f;这些情况在日常运维中并不少见&#xff0c;尤其是在 高负载或资源紧张时&a…

【英伟达AI论文】多模态大型语言模型的高效长视频理解

摘要&#xff1a;近年来&#xff0c;基于视频的多模态大型语言模型&#xff08;Video-LLMs&#xff09;通过将视频处理为图像帧序列&#xff0c;显著提升了视频理解能力。然而&#xff0c;许多现有方法在视觉主干网络中独立处理各帧&#xff0c;缺乏显式的时序建模&#xff0c;…

蓝桥杯备考:图论初解

1&#xff1a;图的定义 我们学了线性表和树的结构&#xff0c;那什么是图呢&#xff1f; 线性表是一个串一个是一对一的结构 树是一对多的&#xff0c;每个结点可以有多个孩子&#xff0c;但只能有一个父亲 而我们今天学的图&#xff01;就是多对多的结构了 V表示的是图的顶点集…

记录小白使用 Cursor 开发第一个微信小程序(一):注册账号及下载工具(250308)

文章目录 记录小白使用 Cursor 开发第一个微信小程序&#xff08;一&#xff09;&#xff1a;注册账号及下载工具&#xff08;250308&#xff09;一、微信小程序注册摘要1.1 注册流程要点 二、小程序发布流程三、下载工具 记录小白使用 Cursor 开发第一个微信小程序&#xff08…

【Linux学习笔记】Linux基本指令分析和权限的概念

【Linux学习笔记】Linux基本指令分析和权限的概念 &#x1f525;个人主页&#xff1a;大白的编程日记 &#x1f525;专栏&#xff1a;Linux学习笔记 文章目录 【Linux学习笔记】Linux基本指令分析和权限的概念前言一. 指令的分析1.1 alias 指令1.2 grep 指令1.3 zip/unzip 指…

【消息队列】数据库的数据管理

1. 数据库的选择 对于当前实现消息队列这样的一个中间件来说&#xff0c;具体要使用哪个数据库&#xff0c;是需要稍作考虑的&#xff0c;如果直接使用 MySQL 数据库也是能实现正常的功能&#xff0c;但是 MySQL 也是一个客户端服务器程序&#xff0c;也就意味着如果想在其他服…

【HarmonyOS Next】鸿蒙加固方案调研和分析

【HarmonyOS Next】鸿蒙加固方案调研和分析 一、前言 根据鸿蒙应用的上架流程&#xff0c;本地构建app文件后&#xff0c;上架到AGC平台&#xff0c;平台会进行解析。根据鸿蒙系统的特殊设置&#xff0c;仿照IOS的生态闭环方案。只能从AGC应用市场下载app进行安装。这样的流程…

nuxt2 打包优化使用“compression-webpack-plugin”插件

在使用 Nuxt.js 构建项目时&#xff0c;为了提高性能&#xff0c;通常会考虑对静态资源进行压缩。compression-webpack-plugin 是一个常用的 Webpack 插件&#xff0c;用于在生产环境中对文件进行 Gzip 压缩。这对于减少网络传输时间和提高页面加载速度非常有帮助。下面是如何在…

不同开发语言之for循环的用法、区别总结

一、Objective-C &#xff08;1&#xff09;标准的c风格 for (int i 0; i < 5; i) {NSLog("i %d", i); } &#xff08;2&#xff09;for in循环。 NSArray *array ["apple", "banana", "orange"]; for (NSString *fruit in …

ctfshow做题笔记—栈溢出—pwn65~pwn68

目录 前言 一、pwn65(你是一个好人) 二、pwn66(简单的shellcode&#xff1f;不对劲&#xff0c;十分得有十二分的不对劲) 三、pwn67(32bit nop sled)&#xff08;确实不会&#xff09; 四、pwn68(64bit nop sled) 前言 做起来比较吃力哈哈&#xff0c;自己还是太菜了&…

Git基础之工作原理

基础概念 git本地有三个工作区域&#xff0c;工作目录 Working Directory&#xff0c;暂存区Stage/Index和资源区Repository/Git Directory&#xff0c;如果在加上远程的git仓库就是四个工作区域 四个区域与文件交换的命令之间的关系 WorkSpace&#xff1a;工作区&#xff0c;就…

Linux 指定命令行前后添加echo打印内容

目录 一. 前提条件二. 通过sh脚本进行批量修改三. 通过Excel和文本编辑器进行批量转换四. 实际执行效果 一. 前提条件 ⏹项目中有批量检索文件的需求&#xff0c;如下所示需要同时执行500多个find命令 find ./work -type f -name *.java find ./work -type f -name *.html fi…

Immich自托管服务的本地化部署与随时随地安全便捷在线访问数据

文章目录 前言1.关于Immich2.安装Docker3.本地部署Immich4.Immich体验5.安装cpolar内网穿透6.创建远程链接公网地址7.使用固定公网地址远程访问 前言 小伙伴们&#xff0c;你们好呀&#xff01;今天要给大家揭秘一个超炫的技能——如何把自家电脑变成私人云相册&#xff0c;并…