记录vuex在项目登录功能的使用

一、记录vuex跟storage结合使用使数据持久化 

// 1. login.vue
// 如在登录之后调用该方法
this.$store.dispatch('getUserInfo')


// 2. store/index.js
// services.getUserInfo:调用接口
getUserInfo ({ commit }) {
      return services.getUserInfo().then(res => {
        res && commit('setUserInfo', res)
      })
},
// storage:封装的util
setUserInfo (state, val) {
      state.userInfo = val
      storage.set('userInfo', val) 
},
state: {
    userInfo: storage.get('userInfo') || {}
},

二、vuex actions中定义的方法的return

记录:

return services.getUserInfo().then(res => {})    //return的是undefined,当then里面的函数有return值的时候,外部return才有值;如果then里面的函数有return值,但是该services.getUserInfo.then没有return的话,内部的值也是return不出去的;

return new Promise((resolve,reject)=>{resolve()})   //new Promise里面需要有resolve/reject函数,不然await此处代码的时候会一直等待这里,即使不写resolve写return也如此;其他同上

三、实战:如果接口返回的数据需要存储在vuex,那么不要在实际组件里面操作接口,可以放在vuex的actions中操作,再由actions中的方法触发commit

// login.vue

handleLogin(){
    this.$refs.loginForm.validate(async valid => {
        if(!valid){
            return false
        }         
        const params = {...this.loginForm}
        this.loading = true
        // res拿到接口返回的router数组
        const res = await this.$store.dispatch("user/login", params)
        this.loading = false
        consoel.log(res) 
    })
}



// store/modules/user.js
// import service.js(接口文件)
login ({ commit, dispatch }, data) {
    return service.login(data).then(async res => {
        if (res.retCode!=200) {
            return
        }
        commit('SET_TOKEN', res.token)
        await dispatch('getUserInfo')
        const routes= await dispatch('generateRoutes')
        return routes
    })
},
getUserInfo({commit,state}){
    return service.getUserInfo(state.token).then(res => {
        res && commit('SET_USERINFO',data.result)
        return res
    })
},
async generateRoutes({ commit, state }) {
    const res = await service.getRoutes(state.token)
    if (res.retCode!== 200) {
      commit('SET_ERROR_COUNTING')
      return []
    }

    const accessRoutes = fitRouter(res.data || []) //fitRouter是自己封装的方法

    commit('SET_ERROR_COUNTING', false)
    commit('SET_INIT', true)
    commit('SET_ROUTES', accessRoutes)

    // dynamically add accessible routes
    router.addRoutes(accessRoutes)

    return accessRoutes
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值