一个登录案例包学会 Pinia

一个登录案例学会 Pinia

Pinia是一个非常简单和直观的状态管理库,可以与Vue.js一起使用。它可以帮助我们更好地管理Vue.js应用程序中的状态,并提供了一种简单的方式来组织和分离业务逻辑。

下面是一个简单的登录案例,演示了如何使用Pinia来管理用户登录状态:

  1. 首先,我们需要安装Pinia。在Vue项目的根目录下,运行以下命令安装它:
`npm install pinia`
  1. 在main.js中导入和使用Pinia:
import {
    
     createPinia } from 'pinia'
import {
    
     createApp } from 'vue'

const app = createApp(App)
const pinia = createPinia()

app.use(pinia)
app.mount('#app')
  1. 创建一个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
    },
  },
})
  1. 在我们的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的官方文档以了解更多信息。

猜你喜欢

转载自blog.csdn.net/qzmlyshao/article/details/132613487