Реагировать: axios.interceptors не работают однозначно
Axios .interceptors в hoc withErrorHandler работают для метода clicked в App.js, но не работают для componentWillMount или componentDidMount в App.js. Как я могу это исправить?
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} />
);
}
}
};
1 ответ
Решение
Вы добавляете перехватчик в hoc сразу после первого рендеринга. И вы используете аксиомы в componentWillMount в приложении. componentWillMount находится перед первым рендером.
Я предлагаю разместить вызов axios для componentDidMount в приложении. В любом случае рекомендуется переносить все побочные эффекты, такие как загрузка данных, в componentDidMount. Проверьте документацию здесь: https://reactjs.org/docs/react-component.html
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;
});
}