目录
一、个人理解
作为一个后端开发,我个人觉得这个stores性质有点类似于全局变量。相等于后端里的一个全局的字典对象,在后端中,我们需要通过全局变量/对象去判断处理相关逻辑,同样store可以为前端处理达到这种效果,vue的store支持在不同的组件中引入,引入的组件可以访问/设置store对象值,拿到唯一的值。
二、安装
使用npm安装,需要有node环境。
npm install vuex
三、登录案例
vue项目中新建stores文件夹,新建UseStore.js文件。
javascript
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}
})
登录页面组件中,通过引入UseStore.js文件,可以调用useUserStore对象。
bash
<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>