javascript - React : axios. 拦截器临时不起作用

标签 javascript reactjs axios interceptor react-hoc

axios.interceptors 特别适用于 App.js 中的 clicked 方法,但不适用于 App.js 中的 componentWillMount 或 componentDidMount。我该如何修复它?

App.js

class App extends Component {
  componentDidMount() {
    axios.get('https://wrongaddress')
        .then(response => {
          console.log(response);
        });
  }

  clicked() {
      axios.get('https://wrongaddress')
          .then(response => {
              console.log(response);
          });
  }

  render() {
    return (
        <button onClick={this.clicked}>btn</button>
    );
  }
}
export default withErrorHandler(App, axios);

hoc/withErrorHandler.js

const withErrorHandler = ( WrappedComponent, axios ) => {
    return class extends Component {
        componentDidMount() {
            axios.interceptors.request.use(req => {
                console.log(req);
                return req;
            });
        }

        render() {
            return (
                <WrappedComponent {...this.props} />
            );
        }
    }
};

最佳答案

您可以在第一次渲染之后临时添加拦截器。并且您在App中的componentWillMount中使用axios。 componentWillMount 在第一次渲染之前。

我建议将 axios 调用放置在 App 中的 componentDidMount 中。无论如何,建议将所有副作用(例如加载数据)放入 componentDidMount 中。检查此处的文档:https://reactjs.org/docs/react-component.html#componentdidmount

class App extends Component {
  componentdidMount() {
    axios.get('https://wrongaddress')
        .then(response => {
          console.log(response);
        });
  }

...

您还可以将 HOC 中的拦截器处理移至 componentWillMount。

const withErrorHandler = ( WrappedComponent, axios ) => {
    return class extends Component {
        componentWillMount() {
            axios.interceptors.request.use(req => {
                console.log(req);
                return req;
            });
        }

关于javascript - React : axios. 拦截器临时不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60203128/

相关文章:

reactjs - React Native 和 Https 代理

javascript - 如何将React Form的输入传递给axios get请求并显示请求结果?

javascript - QML 中 default 关键字的用途是什么?

javascript - 原型(prototype) js super 方法调用或类似的东西

JavaScript 检测不同场景下的八进制值

javascript - 如何使“添加到购物车”按钮正常工作

javascript - React 功能组件不会随着值的改变而改变

javascript - 尝试使用 VueJs 和 Axios 显示对象

javascript - 如何在 React Native 中使用 Tamagui 添加全局样式

javascript - 使用 Node.js 在服务器上呈现 HTML