Лучшая практика для обработки ошибок в Redux и React
У меня есть асинхронная функция в моих действиях редукса, и она возвращает такой объект в моем редукторе:
{
user: {},
fetching: false,
fetched, false,
error: null
}
Таким образом, в основном, когда я начинаю вызывать асинхронную функцию, я обновляю состояние избыточности на fetching: true
и если результат успешно выполнен, то fetched:true
а также fetching:false
Поэтому я сопоставляю состояние редукса с реквизитами, используя connect в response-redux, и я добавил это в функцию рендеринга моего компонента:
if(this.props.fetched) {
// Go to next page
}
И он автоматически переходит на следующую страницу после получения данных.
Однако у меня проблема с обработкой ошибок. Когда ошибка изменяется с нуля на ошибку, то как мне обработать обработку ошибок на моем компоненте реакции. Что у меня сейчас есть:
if(this.props.error != null) {
// popup error
}
Но теперь я попадаю в ситуацию, когда в следующий раз, когда я вызываю свое действие, ему уже присвоено this.props.error для ошибки, и оно не равно NULL, в результате чего отображается всплывающее окно, даже если ошибки нет.
Должен ли я сбрасывать свою ошибку каждый раз, когда она отображается, или есть лучшая практика делать все это?
2 ответа
Промежуточное программное обеспечение redux-catch можно использовать для регистрации ошибок редукторов и промежуточного программного обеспечения Redux.
Вы можете использовать что-то вроде,
import reduxCatch from 'redux-catch';
function errorHandler(error, getState, lastAction, dispatch) {
//dispatch ERROR action as you need.
}
const store = createStore(reducer, applyMiddleware(
reduxCatch(errorHandler)
));
И отобразите всплывающее окно с ошибкой при получении действия ERROR, которое запускается из redux-catch
промежуточное программное обеспечение. Когда вы закрываете всплывающее окно, отправьте действие, которое сбрасывает ошибку до нуля, чтобы всплывающее окно не отображалось, если нет ошибок для отображения.
У меня была похожая проблема, когда модал продолжал отображать старые ошибки после закрытия модального режима. Я решил это, отправив действие "resetErrors" после того, как получил успешный ответ.
Я не нашел лучшего решения, кроме как "перезагружать" его каждый раз.