我需要从 axios 拦截器内部调用 mobx 操作

Ano*_*sSB 5 interceptor react-native mobx axios apisauce

当 API 返回 401 时,我想强制注销用户。以下代码是使用 Mobx 在 React Native Ignite 项目中编写的

import { useStores } from "../../models"
this.apisauce.axiosInstance.interceptors.response.use(response => {
  return response;
}, error => {
  if (error.response.status === 401) {
    useStores().authStore.reset()
  }
  return error;
})
Run Code Online (Sandbox Code Playgroud)

对 authStore.reset() 的调用不会发生,没有错误,没有console.tron.log,什么也没有。有没有更好的做法来捕获401并触发mobx动作?没有在调用 API 的每个单独操作中处理它?

小智 0

就我而言:

// file auth.store.js
class AuthStore {

  ...
  reset(){ ... }
}

export default new AuthStore();
Run Code Online (Sandbox Code Playgroud)
// file models.js
import authStore from 'path/to/file/auth.store.js';

export default { authStore };
Run Code Online (Sandbox Code Playgroud)
// file api-file.js
import useStores from 'path/to/file/models.js';

this.apisauce.axiosInstance.interceptors.response.use(response => {
  return response;
}, error => {
  if (error.response.status === 401) {
    useStores.authStore.reset();
  }
  return error;
})

Run Code Online (Sandbox Code Playgroud)