我如何在 React JS 中创建一个全局可访问的变量
How do I create a globally accessible variable in React JS
在我的 React JS 应用程序中,我进行了多次 API 调用,
不必指定:
const BASE_URL = 'https://apiurlgoeshere.com/'
在每个页面上,我宁愿在整个应用程序中都可以访问 BASE_URL,所以我可以只做 BASE_URL + API_CALL 例如
如果这只是添加 BASE_URL
,那么这可以通过在 constants.js
文件中声明它并从那里导出来实现。但是,这让我们每次发出网络请求时都做 BASE_URL + "something"
,这也不是很理想。也可能存在一些必须共享其他配置的场景,比如必须将公共 header 添加到所有请求。
为了解决这个问题,大多数请求库都有 in-build 解决方案。如果我们选择 axios as the most popular one, we can create a instance,例如:
const instance = axios.create({
baseURL: 'https://some-domain.com/api/',
timeout: 1000,
headers: {'X-Custom-Header': 'foobar'}
});
export default instance;
并在 axios
将要使用的任何地方导入它,例如:
import axios from "./axios-instance";
假设axios-instance.js
是创建实例的文件。现在您可以跳过将 BASE_URL
添加到每个请求,因为它已经在实例中提供。
如果webpack
用于代码包,则可以使用DefinePlugin。
new webpack.DefinePlugin({
'BASE_URL': JSON.stringify('https://apiurlgoeshere.com/')
});
对于gulp
构建,可以使用gulp-replace。
.pipe(replace('BASE_URL', 'https://apiurlgoeshere.com/'))
我知道我创建这个 post 已经有一段时间了 - 只是想回顾一下我真正学到的东西。
这是为 Axios 设置全局配置的好方法。我通常会创建一个文件夹并在其中创建一个 api.js 文件,我用它来进行所有 API 调用,这很棒,因为这意味着您只需指定 headers / base URL / 凭据等一次。
这是解决方案的代码示例:
function apiCall (method, path, data) {
let url = "https://urltoyourapis.com/";
return new Promise((resolve, reject) => {
return Axios[method](url, {headers}, data).then(res => {
return resolve(res);
}).catch(err => {
return reject(err);
})
})
}
现在,无论何时您想要进行 API 调用,您都可以将此函数导入到您想要进行 API 调用的文件中,然后执行以下操作:
apiCall("get", "account-info")
这将对端点 "account-info" 进行 API 调用以获取信息,您可以等待并将结果设置为变量或使用 .then .catch 来处理响应.
在我的 React JS 应用程序中,我进行了多次 API 调用,
不必指定: const BASE_URL = 'https://apiurlgoeshere.com/'
在每个页面上,我宁愿在整个应用程序中都可以访问 BASE_URL,所以我可以只做 BASE_URL + API_CALL 例如
如果这只是添加 BASE_URL
,那么这可以通过在 constants.js
文件中声明它并从那里导出来实现。但是,这让我们每次发出网络请求时都做 BASE_URL + "something"
,这也不是很理想。也可能存在一些必须共享其他配置的场景,比如必须将公共 header 添加到所有请求。
为了解决这个问题,大多数请求库都有 in-build 解决方案。如果我们选择 axios as the most popular one, we can create a instance,例如:
const instance = axios.create({
baseURL: 'https://some-domain.com/api/',
timeout: 1000,
headers: {'X-Custom-Header': 'foobar'}
});
export default instance;
并在 axios
将要使用的任何地方导入它,例如:
import axios from "./axios-instance";
假设axios-instance.js
是创建实例的文件。现在您可以跳过将 BASE_URL
添加到每个请求,因为它已经在实例中提供。
如果webpack
用于代码包,则可以使用DefinePlugin。
new webpack.DefinePlugin({
'BASE_URL': JSON.stringify('https://apiurlgoeshere.com/')
});
对于gulp
构建,可以使用gulp-replace。
.pipe(replace('BASE_URL', 'https://apiurlgoeshere.com/'))
我知道我创建这个 post 已经有一段时间了 - 只是想回顾一下我真正学到的东西。
这是为 Axios 设置全局配置的好方法。我通常会创建一个文件夹并在其中创建一个 api.js 文件,我用它来进行所有 API 调用,这很棒,因为这意味着您只需指定 headers / base URL / 凭据等一次。
这是解决方案的代码示例:
function apiCall (method, path, data) {
let url = "https://urltoyourapis.com/";
return new Promise((resolve, reject) => {
return Axios[method](url, {headers}, data).then(res => {
return resolve(res);
}).catch(err => {
return reject(err);
})
})
}
现在,无论何时您想要进行 API 调用,您都可以将此函数导入到您想要进行 API 调用的文件中,然后执行以下操作:
apiCall("get", "account-info")
这将对端点 "account-info" 进行 API 调用以获取信息,您可以等待并将结果设置为变量或使用 .then .catch 来处理响应.