Um estudo de caso de login Pinia
Pinia é uma biblioteca de gerenciamento de estado muito simples e intuitiva que pode ser usada com Vue.js. Isso nos ajuda a gerenciar melhor o estado em aplicativos Vue.js e fornece uma maneira fácil de organizar e separar a lógica de negócios.
A seguir está um caso de login simples que demonstra como usar o Pinia para gerenciar o status de login do usuário:
- Primeiro, precisamos instalar o Pinia. No diretório raiz do seu projeto Vue, execute o seguinte comando para instalá-lo:
`npm install pinia`
- Importe e use Pinia em main.js:
import {
createPinia } from 'pinia'
import {
createApp } from 'vue'
const app = createApp(App)
const pinia = createPinia()
app.use(pinia)
app.mount('#app')
- Crie um
authStore.js
arquivo para definir nossa Store para gerenciar o status de login:
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
},
},
})
- Usado em nosso componente 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>
Agora, quando o usuário fornece o nome de usuário e a senha corretos no formulário de login, ele define o usuário como conectado, exibe uma mensagem de boas-vindas ao usuário e um botão de logout. Quando o usuário clica no botão de logout, ele é definido como não conectado.
Este é apenas um exemplo simples que você pode ampliar e personalizar de acordo com suas necessidades. Pinia oferece mais funções e usos, como persistência de estado, divisão de módulo, etc. Você pode navegar na documentação oficial do Pinia para saber mais.