Мы используем Transformer для преобразования ответа, получаемого от API.Трансформатор - это функция, которая принимает входной сигнал и обеспечивает желаемый выходной сигнал.Проектирование преобразователя делает код чистым и простым для тестирования.
Например: -
function* updateSomethingFlow(action) {
try {
const response = yield call(updateSomething, action.payload);
// after getting the response from the api pass through the transformer.
const transformedResponse =apiTransformer(action.payload);
if (response) {
yield put({
type: UPDATE_SUCCESS,
data: trasnformedResponse
});
}
} catch (error) {
yield put({
type: UPDATE_FAILURE,
error: error)
});
}
}
const apiTransformer = function(apiResponse) {
// implement the logic. This function returns the transformed Response
}
Используя это, вы можете освободить редуктор от ошибки .Делает код тестируемым и облегчает имитацию.
Для глобальных ошибок бэкэнда создайте глобальный обработчик ошибок с использованием Redux Middleware, как это
const errorTracking = store => next => action => {
if (/_FAILURE$/.test(action.type)) {
const errorCode = parseInt(
_.get(action, ['error', 'response', 'status'])
)
// this was for my use case
if (errorCode === 403) {
// launch an Global error handler action
return next(ErrorHandlerAction())
} else return next(action)
}
return next(action)
}
Хотя для не родовых ошибок Вы можете реализовать HOC, оберните его вокругкомпонент для визуализации.Таким образом, вы можете иметь глобальную реализацию для ошибок.