axios.interceptors适用于App.js中的单击方法,但不适用于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} />
);
}
}
};
答案 0 :(得分:1)
在第一个渲染之后,将拦截器添加到临时对象中。然后在App的componentWillMount中使用axios。 componentWillMount在第一个渲染之前。
我建议将axios调用放在App中的componentDidMount上。无论如何,建议将所有副作用(如加载数据)放入componentDidMount中。在此处查看文档:{{3}}
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;
});
}