22 Vue.js 框架学习 — 集成路由与状态管理

22 Vue.js 框架学习 — 集成路由与状态管理

在本节中,我们将学习如何在 Vue.js 应用中集成路由(Vue Router)和状态管理(Vuex)。这两个工具是开发中大型单页应用时非常重要的组件。

1. 集成路由(Vue Router)

1.1 安装 Vue Router

首先,我们需要安装 Vue Router。如果你是使用 Vue CLI 创建的项目,可以在创建时选择安装 Vue Router;如果已经创建了项目,可以通过以下命令单独安装:

1
npm install vue-router

1.2 配置 Vue Router

接下来,我们需要配置路由。创建一个新的路由文件,如 src/router/index.js

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
import { createRouter, createWebHistory } from 'vue-router';

// 导入页面组件
import Home from '../views/Home.vue';
import About from '../views/About.vue';

// 定义路由
const routes = [
{
path: '/', // 路由路径
name: 'Home', // 路由名称
component: Home // 组件
},
{
path: '/about',
name: 'About',
component: About
}
];

// 创建路由实例
const router = createRouter({
history: createWebHistory(process.env.BASE_URL),
routes // `routes: routes` 的简写
});

export default router;

1.3 在主应用中使用路由

src/main.js 中引入并使用路由:

1
2
3
4
5
6
7
import { createApp } from 'vue';
import App from './App.vue';
import router from './router'; // 导入路由实例

const app = createApp(App);
app.use(router); // 注册路由
app.mount('#app');

1.4 在组件中使用路由

使用 <router-link><router-view> 以便在组件中显示路由内容:

1
2
3
4
5
6
7
8
9
<template>
<div id="app">
<nav>
<router-link to="/">Home</router-link>
<router-link to="/about">About</router-link>
</nav>
<router-view /> <!-- 显示路由匹配的组件 -->
</div>
</template>

2. 集成状态管理(Vuex)

2.1 安装 Vuex

要在 Vue 应用中集成状态管理,首先安装 Vuex:

1
npm install vuex@next

2.2 创建 Vuex Store

创建一个新的状态管理文件,如 src/store/index.js

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
import { createStore } from 'vuex';

const store = createStore({
state: {
count: 0 // 应用状态
},
mutations: {
increment(state) { // 修改状态的方法(同步)
state.count++;
},
decrement(state) {
state.count--;
}
},
actions: {
increment({ commit }) { // 提交 mutation(异步)
commit('increment');
},
decrement({ commit }) {
commit('decrement');
}
},
getters: {
getCount(state) { // 获取状态的方式
return state.count;
}
}
});

export default store;

2.3 在主应用中使用 Vuex

src/main.js 中引入并使用 Vuex:

1
2
3
4
5
6
7
import { createApp } from 'vue';
import App from './App.vue';
import store from './store'; // 导入 Vuex store

const app = createApp(App);
app.use(store); // 注册 Vuex
app.mount('#app');

2.4 在组件中使用 Vuex

你可以在组件中通过 mapStatemapActions 来使用 Vuex:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<template>
<div>
<h1>计数: {{ count }}</h1>
<button @click="increment">增加</button>
<button @click="decrement">减少</button>
</div>
</template>

<script>
import { mapState, mapActions } from 'vuex';

export default {
computed: {
...mapState(['count']) // 映射 state
},
methods: {
...mapActions(['increment', 'decrement']) // 映射 actions
}
};
</script>

3. 小结

在本节中,我们学习了如何:

  • 安装和配置 Vue Router 以管理应用的路由。
  • 创建 Vuex store 来管理应用的状态。
  • 在组件中使用路由和状态管理。

通过这些知识,你可以构建更复杂的 Vue 应用,处理导航和状态管理。接下来,我们可以深入学习 Vue 的其他特性,或者实践更多的例子来巩固你的理解。

完成项目并部署

完成项目并部署

在这一节中,我们将完成一个简单的 Vue.js 项目,并且学习如何将这个项目部署到互联网上。

项目概述

我们将创建一个简单的待办事项应用,允许用户添加和删除待办事项。这个应用将展示 Vue.js 的基本用法,包括数据绑定、事件处理和组件。

项目结构

项目结构如下:

1
2
3
4
todo-app/
├── index.html
├── app.js
└── style.css

第一步:创建 index.html

index.html 中,我们将引入 Vue.js 库,并创建基本的 HTML 结构。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
<!DOCTYPE html>
<html lang="zh">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>待办事项应用</title>
<link rel="stylesheet" href="style.css">
</head>
<body>
<div id="app">
<h1>待办事项</h1>
<input type="text" v-model="newTask" placeholder="输入待办事项" @keyup.enter="addTask">
<ul>
<li v-for="(task, index) in tasks" :key="index">
{{ task }} <button @click="removeTask(index)">删除</button>
</li>
</ul>
</div>
<script src="https://cdn.jsdelivr.net/npm/vue@2.6.14"></script>
<script src="app.js"></script>
</body>
</html>

代码分析

  • 使用 v-model 绑定输入框的值到 newTask 数据属性。
  • 使用 v-for 指令循环渲染待办事项列表。
  • 使用 @click 事件指令绑定删除功能。

第二步:创建 app.js

app.js 中,我们将定义 Vue 实例及其数据和方法。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
new Vue({
el: '#app',
data: {
newTask: '',
tasks: []
},
methods: {
addTask() {
if (this.newTask) {
this.tasks.push(this.newTask);
this.newTask = '';
}
},
removeTask(index) {
this.tasks.splice(index, 1);
}
}
});

代码分析

  • data 用于存储应用的状态,其中 newTask 是当前输入的待办事项,tasks 是待办事项数组。
  • addTask 方法用于添加新的待办事项,removeTask 方法用于删除指定索引的待办事项。

第三步:创建 style.css

style.css 中,我们添加一些基本样式,让应用看起来更美观。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
body {
font-family: Arial, sans-serif;
background-color: #f4f4f4;
}

#app {
max-width: 400px;
margin: 50px auto;
padding: 20px;
background: white;
border-radius: 8px;
box-shadow: 0 0 10px rgba(0, 0, 0, 0.1);
}

input {
width: calc(100% - 22px);
padding: 10px;
margin-bottom: 10px;
border-radius: 4px;
border: 1px solid #ccc;
}

button {
background-color: #ff6b6b;
color: white;
border: none;
padding: 5px 10px;
border-radius: 4px;
cursor: pointer;
}

button:hover {
background-color: #ff4d4d;
}

第四步:测试项目

完成以上步骤后,打开 index.html 文件,您应该可以看到待办事项应用的界面。可以尝试添加一些待办事项,并通过点击“删除”按钮来移除它们。

第五步:部署项目

要将我们的项目部署到互联网上,您可以选择多种方式,例如使用 GitHub Pages、Netlify 或 Vercel。我们以 GitHub Pages 为例:

准备工作

  1. 确保您已经安装了 Git。
  2. 创建一个新的 GitHub 仓库。

提交项目

在项目目录中,打开终端并执行以下命令:

1
2
3
4
5
git init
git add .
git commit -m "Initial commit"
git remote add origin https://github.com/用户名/仓库名.git
git push -u origin master

启用 GitHub Pages

  1. 进入您 GitHub 上的项目仓库。
  2. 点击 “Settings”。
  3. 向下滚动到 “GitHub Pages” 部分。
  4. 从 “Source” 下拉菜单中选择 master branch,然后点击 “Save”。

访问您的应用

几分钟后,您的待办事项应用就会通过 https://用户名.github.io/仓库名/ 网址访问。

总结

在本节中,我们创建了一个简单的待办事项应用,并学习了如何将其部署到互联网。通过这些步骤,您可以开始探索 Vue.js 的更多功能,并创建更复杂的应用程序。

与第三方API集成

与第三方API集成

在本小节中,我们将探讨如何使用 Vue.js 框架与第三方 API 进行集成。利用 API 可以让我们的应用获取外部数据,提升应用的动态性和互动性。我们将通过一个简单的示例来演示如何实现这一点。

1. 准备工作

首先,你需要创建一个基础的 Vue.js 项目。如果你尚未设置好项目,可以使用 Vue CLI 快速启动一个新项目:

1
2
3
4
npm install -g @vue/cli
vue create my-vue-app
cd my-vue-app
npm run serve

2. 选择一个API

在这个示例中,我们将使用 JSONPlaceholder,这是一个提供伪造数据的免费 API。我们将请求用户的数据,URL 为 https://jsonplaceholder.typicode.com/users

3. 安装 Axios

我们将使用 Axios 作为我们的 HTTP 客户端来进行数据请求。请在项目的根目录下运行以下命令来安装 Axios

1
npm install axios

4. 创建组件

接下来,我们将在 src/components 目录下创建一个新的 Vue 组件,命名为 UserList.vue,用于展示用户列表。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
<template>
<div>
<h1>User List</h1>
<ul>
<li v-for="user in users" :key="user.id">
{{ user.name }} - {{ user.email }}
</li>
</ul>
</div>
</template>

<script>
import axios from 'axios';

export default {
data() {
return {
users: []
};
},
methods: {
async fetchUsers() {
try {
const response = await axios.get('https://jsonplaceholder.typicode.com/users');
this.users = response.data;
} catch (error) {
console.error('Error fetching users:', error);
}
}
},
mounted() {
this.fetchUsers();
}
}
</script>

<style scoped>
h1 {
color: #42b983;
}
</style>

5. 解释代码

  • 模板部分

    • 使用 <template> 标签包裹 HTML 结构。
    • 使用 v-for 指令来循环渲染用户列表。
  • 脚本部分

    • 导入 axios 库。
    • data 方法中初始化一个 users 数组,用于存储从 API 获取的数据。
    • 创建 fetchUsers 方法,以异步方式调用 Axios 来获取用户数据,并将结果存储到 users 数组中。
    • 在组件 mounted 生命周期钩子中调用 fetchUsers 方法,以确保在组件加载后立即获取数据。
  • 样式部分

    • 为标题添加了一些基础样式。

6. 在主应用中使用组件

最后,我们需要在 src/App.vue 中引入并使用 UserList 组件:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
<template>
<div id="app">
<UserList />
</div>
</template>

<script>
import UserList from './components/UserList.vue';

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

<style>
#app {
font-family: Avenir, Helvetica, Arial, sans-serif;
text-align: center;
color: #2c3e50;
margin-top: 60px;
}
</style>

7. 运行项目

现在一切都准备就绪,可以运行以下命令启动项目:

1
npm run serve

打开浏览器并访问 http://localhost:8080,你应该能够看到从 API 获取的用户列表。

总结

我们通过本节学习了如何使用 Vue.js 集成第三方 API,使用 Axios 进行异步请求,并将获取的数据渲染到组件中。通过这些步骤,你可以轻松地将 Vue.js 应用与外部数据源连接,构建更加动态和互动的应用。