下面将展示如何在 Vue 3 项目中使用 Pinia 进行状态管理。这个示例包括多个 store,使用 getters 和 actions,以及在组件中使用这些 store。
首先,确保你已经安装了 Vue 3,然后通过 npm 或 yarn 安装 Pinia:
npm install pinia
或者
yarn add pinia
在你的 Vue 3 项目的入口文件(例如 main.js
或 main.ts
)中配置 Pinia:
import { createApp } from 'vue';
import { createPinia } from 'pinia';
import App from './App.vue';
const app = createApp(App);
const pinia = createPinia();
app.use(pinia);
app.mount('#app');
src/stores/user.js
:
import { defineStore } from 'pinia';
export const useUserStore = defineStore('user', {
state: () => ({
name: 'John Doe',
age: 30
}),
getters: {
doubleAge: (state) => state.age * 2
},
actions: {
setName(newName) {
this.name = newName;
},
incrementAge() {
this.age++;
}
}
});
src/stores/task.js
:
import { defineStore } from 'pinia';
export const useTaskStore = defineStore('task', {
state: () => ({
tasks: [
{ id: 1, title: 'Task 1', completed: false },
{ id: 2, title: 'Task 2', completed: true }
]
}),
getters: {
completedTasks: (state) => state.tasks.filter(task => task.completed),
pendingTasks: (state) => state.tasks.filter(task => !task.completed)
},
actions: {
addTask(task) {
this.tasks.push(task);
},
toggleTaskCompletion(taskId) {
const task = this.tasks.find(task => task.id === taskId);
if (task) {
task.completed = !task.completed;
}
}
}
});
src/components/UserComponent.vue
:
Name: {{ name }}
Age: {{ age }}
Double Age: {{ doubleAge }}
src/components/TaskComponent.vue
:
Tasks
-
{{ task.title }}
Completed Tasks
- {{ task.title }}
Pending Tasks
- {{ task.title }}
以下是一个完整的示例,展示了如何在 Vue 3 项目中使用 Pinia 和 进行更复杂的状态管理:
npm install vue pinia
main.js
:
import { createApp } from 'vue';
import { createPinia } from 'pinia';
import App from './App.vue';
const app = createApp(App);
const pinia = createPinia();
app.use(pinia);
app.mount('#app');
src/stores/user.js
:
import { defineStore } from 'pinia';
export const useUserStore = defineStore('user', {
state: () => ({
name: 'John Doe',
age: 30
}),
getters: {
doubleAge: (state) => state.age * 2
},
actions: {
setName(newName) {
this.name = newName;
},
incrementAge() {
this.age++;
}
}
});
src/stores/task.js
:
import { defineStore } from 'pinia';
export const useTaskStore = defineStore('task', {
state: () => ({
tasks: [
{ id: 1, title: 'Task 1', completed: false },
{ id: 2, title: 'Task 2', completed: true }
]
}),
getters: {
completedTasks: (state) => state.tasks.filter(task => task.completed),
pendingTasks: (state) => state.tasks.filter(task => !task.completed)
},
actions: {
addTask(task) {
this.tasks.push(task);
},
toggleTaskCompletion(taskId) {
const task = this.tasks.find(task => task.id === taskId);
if (task) {
task.completed = !task.completed;
}
}
}
});
src/components/UserComponent.vue
:
Name: {{ name }}
Age: {{ age }}
Double Age: {{ doubleAge }}
src/components/TaskComponent.vue
:
Tasks
-
{{ task.title }}
Completed Tasks
- {{ task.title }}
Pending Tasks
- {{ task.title }}
通过这些步骤,你可以在 Vue 3 项目中使用 Pinia 和 管理更复杂的状态。你可以根据需要进一步扩展这些 store 和组件,以适应你的应用需求。