使用vuex实现登录,vuex基本使用方法

1.store/index.js

import { createStore } from 'vuex'
import { Login } from '@/api/user' //引入登录方法

export default createStore({
    //vuex的基本数据,用来存储变量
    //取值:$store.state.token和...mapState(["token"])
    state: {
        token: ''
    },

    //提交更新数据的方法,必须是同步的
    //触发:1.action 中的 commit('mutation名称',data)
    //2.组件中的 $store.commit('mutation名称',data)...mapMutations(["mutation名称"])
    mutations: {
        SET_TOKEN: (state, token) => {
            state.token = token
        }
    },

    //包裹mutations,使之可以异步
    //触发: 组件中 $store.dispatch('action 名称', data)...mapActions(["actions名称"])
    actions: {
        LoginResult({ commit }, userInfo) {
            return new Promise((resolve, reject) => {
                Login(userInfo).then(response => {
                    const { code, token } = response.data
                    if (code == 200) {
                        localStorage.setItem('token', token)
                        commit("SET_TOKEN", token)
                    }
                    resolve(response.data)
                }).catch(error => {
                    reject(error)
                })
            })
        }
    },

    //从基本数据派生的数据,相当于state的计算属性
    //触发:$store.getters()...mapGetters()
    getters: {

    },

    //模块化vuex,可以让每一个模块拥有自己的state、mutation、action、getters,使得结构非常清晰,方便管理。
    modules: {

    }
})

2.main.js

import store from "./store"
app.use(store)

3.login.vue

// vue3.0
import { useStore } from "vuex";
export default {
	setup() {
		const state = reactive({
		  form: {
		    username: "",
		    password: "",
		  },
		});

		const store = useStore();

		const onSubmit = async () => {
		  const { username, password } = state.form;
		  if (
		    username == undefined ||
		    password == undefined ||
		    username.trim() == "" ||
		    password.trim() == ""
		  ) {
		    return message.warning("用户名和密码不能为空!");
		  }
		  const res = await store.dispatch('LoginResult', state.form);
		  console.log(res);
		  console.log(store.state.token);
		};
		return {
		  ...toRefs(state),
		  onSubmit,
		};
  },
}

在这里插入图片描述

点击这个也可以参考一下,vue项目用户登录状态管理,vuex+localStorage实现

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值