首页 > 解决方案 > React - Mobx - Fetch - DRY 最佳实践

问题描述

我正在尝试清理一些代码以消除冗余并对最佳实践有一些疑问。

为了简单起见,假设我有 3 个 mobx 商店PeopleStorePlacesStoreAuthStore.

所有这些商店都使用fetch.

AuthStore提供登录功能并具有以下属性:@observable apiToken

其他商店有重复的逻辑,设置api url,token等...

我尝试创建以下文件:

// ./api.js

const url = 'https://example.com'
const options = {
   headers: {
      Authorization: ??? (how do I access AuthStore.apiToken)
   }
}

export const api = (endpoint) => {
  fetch(url + endpoint, options)
}

然后在PeopleStore

import api from './api'

class PeopleStore {
   getPeople() {
     api('/people');
   }
}

(这只是概念的一个例子,而不是实际的代码)

我的问题是:

标签: javascriptreactjsdrymobx

解决方案


另一种方法是在应用程序的顶层全局设置您的授权标头。这将需要您安装axios或类似的东西

例如,在您的根 index.js 中:

  • 获取您的 api 密钥,通过process.env.apiToken或以任何方式获取它
  • 设置标题:

axios.defaults.headers.common['Authorization'] = apiToken;

您还可以设置基本 URL 以帮助路径:

axios.defaults.baseURL = 'https://api.example.com';

这样您就不必担心令牌,它只会被照顾。


推荐阅读