请问怎样在普通js中调用vuex modules中的方法?

前端登录后获取后端token,后端token有时限,过期后需要重新登录获取token(调用vuex中的退出方法).

modules user.js 文件

export default {
  namespaced: true,
  state: () => ({
    token: uni.getStorageSync(TOKEN_KEY) || "",
    userInfo: uni.getStorageSync(USER_INFO_KEY) || {},
  }),
  actions: {
    /**
     * 退出登录
     */
    logout(content) {
      this.commit("user/removeToToken");
      this.commit("user/removeToUserInfo");
    },
  },
};

在接口请求文件中调用logout()方法

import store from "vuex";
import { mapActions } from "vuex";
console.log("store", store);
console.log("logout", store.mapActions("user", ["logout"]));
console.log("logout()", store.mapActions("user", ["logout"]).logout());

控制台报错
image.png

发现是request.js是比main.js先执行的,vuex还没生效

1655429643001.jpg

可能描述的不够清楚,可以继续补充信息

请大佬指点一二

阅读 3.3k
2 个回答

说的比较直白一些,mapAction返回的结果不是给你用的,是给Vue构造的时候用的。提示告诉你dispatch不可访问,因为闭包的关系有些东西不是直接调用就好使的。

如果没记错的话store.dispatch就行,你可以查看一下store的原型

已参与了 SegmentFault 思否社区 10 周年「问答」打卡 ,欢迎正在阅读的你也加入。

具体见action分发方法


你的情况应该是需要这样调用: store.dispatch("logout")

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题