Я пытаюсь обработать ошибку API с помощью Redux dispatch, создавая action, reducer & connect (mapStateToProps) в конце.
Поэтому, когда я ввожу неправильный URL, я получаю сообщение об ошибке на моем экране.Но мои ссылки кнопок, обернутые внутри тега, щелкаются, тогда мое следующее представление показывает то же самое сообщение об ошибке вместо рендеринга нового представления.
// Actions
export const API_ERROR = "API_ERROR"
export const resetErrorCode = () => ({
type: RESET_ERROR_CODE
})
// Reducers
import { API_ERROR, RESET_ERROR_CODE } from "actions"
const api = (state = { errorCode: null }, action) => {
switch (action.type) {
case API_ERROR:
return { ...state, errorCode: action.errorCode }
case RESET_ERROR_CODE:
return { ...state, errorCode: action.errorCode }
default:
return { errorCode: null }
}
}
export default api
// Combiner reducers
import { combineReducers } from 'redux'
import API from "./api"
export default combineReducers({
API
});
// test.jsx
import { connect } from 'react-redux'
import API from 'api.js'
import { resetErrorCode } from 'actions'
import { Link } from 'react-router-dom'
class Test extends Component {
componentDidMount() {
API.call()
}
render() {
switch (this.props.errorCode) {
case 400:
case 404:
return (
<div>
Error Page
</div>
)
default:
return (
<div>
<Link to={{pathname: '/nextPage'}}> <button> Next Page </button> </Link>
</div>
)
}
}
componentWillUnmount() {
this.props.errorCode()
}
}
const mapStateToProps = (state) => {
return {
errorCode: state.apiStatus.errorCode,
}
}
const mapDispatchToProps = (dispatch) => {
return {
errorCode: () => dispatch(resetErrorCode())
}
}
export default connect(mapStateToProps)(Test)
// api.js
class API () {
responseErrorHandler(statusCode) {
console.log('responseErrorHandler() called')
store.dispatch(notifyAPIError(statusCode))
}
call = () => {
axios.get(url)
.then(...)
.catch((error) => this.responseErrorHandler(error.response.status))
}
}
Я наблюдал за моим состоянием избыточности, в то время как правильное состояние избыточности URL отображает {errorCode: null} и когда я введу неправильный URL-адрес, состояние изменится на {erroCode: 404}.Теперь Если нажать на мою кнопку, новый вид отображается, но код ошибки не меняется.Состояние Redux по-прежнему {erroCode: 404}.
Я пытался использовать componentWillUnmount, чтобы изменить состояние errorCode на ноль, но он не работает.
Есть ли решение этой проблемы, и я не уверен в своем подходе componentWillUnmount ().
Буду признателен за помощь.