【发布时间】:2021-05-11 05:44:47
【问题描述】:
所以我使用 HOC 进行一般错误处理,反应如下:
import React, { useState, useEffect } from 'react'
import Modal from '../../UI/Modal/Modal'
const WithErrorHandler = (WrappedComponent, axios) => {
const NewComponent = props => {
console.log('UseState')
const [error, setError] = useState(null)
console.log('runs')
useEffect(() => {
const req = axios.interceptors.request.use(config => {
console.log('request intercepted')
return config
})
const res = axios.interceptors.response.use(null, error => {
setError(error)
return Promise.reject(error)
})
return () => {
axios.interceptors.request.eject(req)
axios.interceptors.response.eject(res)
}
}, [])
return (
<div>
{console.log('render')}
{error ? (
<Modal clickHandler={() => setError(null)}> {error.message}</Modal>
) : null}
<WrappedComponent {...props} />
</div>
)
}
return NewComponent
}
export default WithErrorHandler
我遇到的问题是我有一个组件在它的 useEffect() 中触发 axios 请求。 当我尝试用我的 WithErrorHandler 包装这个组件时,包装组件的 useEffect 首先触发,然后 HOC withErrorHandler 的 useEffect 运行。这会导致 axios 请求比 HOC 注册 axios 拦截器的速度更快。任何有关如何解决此问题的想法都将不胜感激。
【问题讨论】:
标签: reactjs axios use-effect