主页 > IT业界  > 

vuestores全局状态共享

vuestores全局状态共享

目录

一、个人理解

二、安装

三、登录案例


一、个人理解

        作为一个后端开发,我个人觉得这个stores性质有点类似于全局变量。相等于后端里的一个全局的字典对象,在后端中,我们需要通过全局变量/对象去判断处理相关逻辑,同样store可以为前端处理达到这种效果,vue的store支持在不同的组件中引入,引入的组件可以访问/设置store对象值,拿到唯一的值。

二、安装

使用npm安装,需要有node环境。

npm install pinia

三、登录案例

1、主文件去创建并挂载Pinia到vue app应用。

import { createApp } from 'vue' import App from './App.vue' import router from './router/main' import ElementPlus from 'element-plus' import 'element-plus/dist/index.css' // import locale from 'element-plus/es/locale/lang/zh-cn' import * as Icons from '@element-plus/icons-vue' import zhCn from 'element-plus/es/locale/lang/zh-cn' // 引入中文语言包 import { createPinia } from 'pinia' // createApp(App).use(router).mount('#app') const app = createApp(App) app.use(createPinia()) app.use(router) app.use(ElementPlus, { locale: zhCn, }) // 注册所有图标为全局组件 Object.keys(Icons).forEach((key) => { app ponent(key, Icons[key]) }) app.mount('#app')

2、vue项目中新建stores文件夹,新建userStore.js文件。

import { defineStore } from "pinia"; import { ref } from "vue"; export const useUserStore = defineStore('userStore', () => { const userName = ref('') function setUserName(value){ userName.value = value } return { userName, setUserName} })

3、登录页面组件中,通过引入userStore.js文件,可以调用useUserStore对象。

<template> pass </template> <script setup> import { ref, reactive, onMounted } from 'vue'; import axios from 'axios'; import { useRoute, useRouter } from 'vue-router'; import { ElMessage } from 'element-plus'; import { useUserStore } from '@/stores/userStore.js'; const store = useUserStore() const route = useRoute() const router = useRouter() const loginParams = reactive({ 'userName': '', 'password': '', }) const rules = reactive({ userName: [{required: true, message: '请输入用户名', trigger: 'blur'}], password: [{required: true, message: '请输入密码', trigger: 'blur'}] }) const user = ref(null) const loading = ref(null) const error = ref(null) const total = ref(0) function userLogin (){ loading.value = true axios.post('http://123:456/login', loginParams) .then((res) => { # 设置登录用户 store.setUserName(loginParams.userName) // 登录成功跳转页面路由,store.userName获取store变量值 ElMessage.success(`用户:${store.userName},欢迎回来!`) router.push({ name: 'handle'}) }) .catch(() => { ElMessage.error('用户名或密码错误!') loading.value = false }) .finally(() => { loading.value = false }) } <style scoped> pass </style>

标签:

vuestores全局状态共享由讯客互联IT业界栏目发布,感谢您对讯客互联的认可,以及对我们原创作品以及文章的青睐,非常欢迎各位朋友分享到个人网站或者朋友圈,但转载请说明文章出处“vuestores全局状态共享