Vek*_*r88 1 typescript vue.js axios vuex
我在 Vuex 模块中声明了一个动作:
storeBudgets(store: ActionContext<State, any>) {
return axiosAuth.get('/budget')
.then((res) => {
store.commit('setBudgets', res.data.budgets);
});
}
Run Code Online (Sandbox Code Playgroud)
其中 axiosAuth 是 axios 的自定义实例:
import axios from 'axios';
import store from './store/index';
const axiosAuth = axios.create({
baseURL: 'http://localhost:3000',
});
axiosAuth.interceptors.request.use((config) => {
config.headers['x-access-token'] = store.getters.getUserToken;
return config;
});
export default axiosAuth;
Run Code Online (Sandbox Code Playgroud)
我在其他 vuex 商店模块中使用这个 axios 实例没有任何问题,但是对于这个特定模块中的这个特定操作,我收到以下错误:
TypeError: rawModule is undefined
Run Code Online (Sandbox Code Playgroud)
一旦我评论了对 axiosAuth 的引用,错误就会消失。
我认为这个问题与我在 axios 拦截器中引用 store 的事实有关,因为注释该config.headers行会使应用程序加载没有任何问题。
我正在从 TypeScript 代码库中的 JavaScript 项目迁移此逻辑,并且之前的实现没有任何问题。
我认为这里的问题是 TypeScript 如何尝试转换依赖项的导入。
我只是猜测,但我在 axios 文件中引用了商店,并在其中一个 vuex 商店模块中引用了 axios。这可能会创建某种循环引用循环,最终引发错误。
为了解决我的问题,我在创建 vuex 存储后,在store.ts文件中移动了 axios 拦截器的设置。
import Vue from 'vue';
import Vuex from 'vuex';
import axiosAuth from "@/axios-auth";
Vue.use(Vuex);
const vuexStore = new Vuex.Store({
state: {
},
modules: {
// ...
},
});
axiosAuth.interceptors.request.use((config) => {
config.headers['x-access-token'] = vuexStore.getters.getUserToken;
return config;
});
export default vuexStore;
Run Code Online (Sandbox Code Playgroud)
我不确定这是否是最干净的解决方案,但我很高兴,因为它解决了我的主要问题。
| 归档时间: |
|
| 查看次数: |
869 次 |
| 最近记录: |