vue3 vuex存取

1 篇文章 0 订阅

vuex配置 

src\store\index.ts

import { createStore } from 'vuex'
import userinfo from './modules/userinfo'
import getters from './getters'
export default createStore({
  modules: {
    userinfo
  },
  getters
})

 src\store\getters.js

export default {
  token: state => state.userinfo.token,
  menuId: state => state.userinfo.menuId,
}

 store\modules\userinfo.js

import { router } from '@/router'
import { setTokenTime } from '@/utils/auth'
export default {
  state: {
    token: '',
    menuId: '',
  },
  mutations: {
    SET_TOKEN (state, value) {
      state.token= value
    },
    SET_MENU_ID (state, value) {
      state.menuId = value
    }
  },
  actions: {
    SET_MENU_ID ({ commit }, value) {
      commit('SET_MENU_ID', value)
    },
    login ({ commit }) {
      // 方法一:从浏览器地址栏中获取
      // const token = location.search.split('token')[1].split('=')[1]
      // commit('SET_TOKEN', token)
      // 方法二:从api中获取
      return new Promise((resolve, reject) => {
        loginApi(userInfo).then((res) => {
          commit('SET_TOKEN', res.token)
          setTokenTime()
          router.replace('/')
          resolve()
        }).catch((err) => {
          reject(err)
        })
      })
    },
    logout ({ commit }) {
      commit('SET_TOKEN', '')
      this.$store.dispatch('user/logout')
    }
  }
}

设置token到期时间

src\utils\auth.js 

import { TOKEN_TIME, TOKEN_TIME_VALUE } from './constant'

// 登录时设置时间
export const setTokenTime = () => {
  sessionStorage.setItem(TOKEN_TIME, Date.now())
}

// 获取
export const getTokenTime = () => {
  return sessionStorage.getItem(TOKEN_TIME)
}

// 是否已过期
export const diffTokenTime = () => {
  const currentTime = Date.now()
  const tokenTime = getTokenTime()
  return currentTime - tokenTime > TOKEN_TIME_VALUE
}

 src\utils\constant.js

// token 有效期
export const TOKEN_TIME = 'tokenTime'
export const TOKEN_TIME_VALUE = 2 * 60 * 60 * 1000

页面存储操作

import { useStore } from 'vuex'
const store = useStore()

// 存入
store.dispatch('SET_MENU_ID', menuId)

// 获取
const menuId = ref(store.state.menuId)

// 以vuex方式调取登录api
store.dispatch('userinfo/login', ruleForm)

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Vue.js 2中使用Vuex存取数据,首先你需要安装并引入Vuex库。然后,你需要在你的Vue应用中创建一个store实例,该实例将包含你的应用所有的共享数据。 首先,在你的项目中安装Vuex: ``` npm install vuex ``` 然后,在你的入口文件(比如main.js)中引入Vuex并创建一个store实例: ```javascript import Vue from 'vue' import Vuex from 'vuex' Vue.use(Vuex) const store = new Vuex.Store({ state: { // 在这里定义你的共享数据 count: 0 }, mutations: { // 在这里定义修改state的方法 increment(state) { state.count++ } }, actions: { // 在这里定义触发mutations的方法 increment(context) { context.commit('increment') } }, getters: { // 在这里定义获取state的方法 getCount: state => state.count } }) new Vue({ store, // ...其他配置 }).$mount('#app') ``` 现在,你可以在你的Vue组件中通过以下方式来存取数据: 1. 使用`this.$store.state`来获取state中的数据: ```javascript this.$store.state.count ``` 2. 使用`this.$store.commit`来触发mutations中的方法,修改state的数据: ```javascript this.$store.commit('increment') ``` 3. 使用`this.$store.dispatch`来触发actions中的方法,间接地修改state的数据: ```javascript this.$store.dispatch('increment') ``` 4. 使用`this.$store.getters`来获取getters中的数据: ```javascript this.$store.getters.getCount ``` 这样,你就可以在Vue组件中存取Vuex中的数据了。记得在组件中使用`computed`来实时获取数据的变化。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值