一个登录案例学会 Pinia
Pinia是一个非常简单和直观的状态管理库,可以与Vue.js一起使用。它可以帮助我们更好地管理Vue.js应用程序中的状态,并提供了一种简单的方式来组织和分离业务逻辑。
下面是一个简单的登录案例,演示了如何使用Pinia来管理用户登录状态:
- 首先,我们需要安装Pinia。在Vue项目的根目录下,运行以下命令安装它:
`npm install pinia`
- 在main.js中导入和使用Pinia:
import {
createPinia } from 'pinia'
import {
createApp } from 'vue'
const app = createApp(App)
const pinia = createPinia()
app.use(pinia)
app.mount('#app')
- 创建一个
authStore.js
文件来定义我们的Store,用于管理登录状态:
import {
defineStore } from 'pinia'
export const useAuthStore = defineStore('auth', {
state: () => ({
user: null,
isLoggedIn: false,
}),
actions: {
login(username, password) {
// 模拟登录请求
return new Promise((resolve, reject) => {
setTimeout(() => {
if (username === 'admin' && password === 'admin123') {
this.user = {
username }
this.isLoggedIn = true
resolve()
} else {
reject('Invalid credentials')
}
}, 1000)
})
},
logout() {
this.user = null
this.isLoggedIn = false
},
},
})
- 在我们的Vue组件中使用
useAuthStore
:
<template>
<div>
<h1 v-if="auth.isLoggedIn">Welcome, {
{
auth.user.username }}!</h1>
<form v-if="!auth.isLoggedIn" @submit.prevent="login">
<label for="username">Username:</label>
<input type="text" id="username" v-model="username" />
<label for="password">Password:</label>
<input type="password" id="password" v-model="password" />
<button type="submit">Login</button>
</form>
<button v-if="auth.isLoggedIn" @click="logout">Logout</button>
</div>
</template>
<script>
import {
useAuthStore } from './authStore'
export default {
setup() {
const auth = useAuthStore()
const username = ref('')
const password = ref('')
const login = () => {
auth.login(username.value, password.value)
.then(() => {
// 登录成功
})
.catch((error) => {
console.error(error)
})
}
const logout = () => {
auth.logout()
}
return {
auth,
username,
password,
login,
logout,
}
},
}
</script>
现在,当用户在登录表单中提供正确的用户名和密码时,它会将用户设置为已登录,并向用户显示欢迎消息,并显示一个登出按钮。当用户点击登出按钮时,它会将用户设置为未登录。
这只是一个简单的示例,你可以根据自己的需求进一步扩展和定制。Pinia提供了更多的功能和用法,如状态的持久化、模块的拆分等。你可以浏览Pinia的官方文档以了解更多信息。