我目前正在对一个公共api进行api调用,该api返回一个关于猫的随机事实。我还添加了axios拦截器,以便在useeffect中附加一个新的请求头,并希望每次更改updateheader状态值时都会更新x_testing_头。
useEffect(() => {
axios.interceptors.request.use(config => {
config.headers.X_TESTING_HEADER = `${updateHeader}`;
return config;
});
}, [updateHeader]);
https://stackblitz.com/edit/axios-interceptors-issues?file=src/shell.js 具有包含所有必要代码块的工作示例。请查收https://axios-interceptors-issues.stackblitz.io/ 运行stackblitz代码并打开n/w选项卡以检查标题值。
默认情况下,updateheader值设置为false,当用户登录页面时,x_testing_头值设置为false。下面的屏幕截图显示了名为“更新标题”和“获取新事实”的两个按钮。
单击更新标题,将状态值切换到false和true之间,然后单击更新标题按钮,可以观察到屏幕上的状态值已更新。尝试使用“获取新事实”按钮获取新事实时,x\u testing\u header值仍显示为false。如何根据状态值更新请求标头,标头是否仅设置一次,是否需要刷新以更新标头值?
1条答案
按热度按时间hfsqlsce1#
您在useeffect中创建拦截器的示例;将在每次调用useeffect时添加新的拦截器。所以,如果你想更新一个拦截器,你必须首先清理任何先前提出的拦截器。https://axios-http.com/docs/interceptors
拦截器更适用于变化不大的逻辑。如果您需要经常设置新标题,而不是创建自定义axios示例,一种可能的解决方案是:
(见https://axios-http.com/docs/instance 及https://axios-http.com/docs/config_defaults)