У меня есть много асин c Redux действий, которые все выбирают различные ресурсы из API. Теперь, если пользователь не аутентифицирован, все эти вызовы API вернут 401.
Теперь я ищу способ перехватить все это и автоматически перейти на страницу входа с помощью history.pu sh ( '/авторизоваться'). Теперь я подумал о «умном» способе сделать это, когда все эти асин c действия устанавливают статус 401 для объекта действия. Впоследствии редуктор перехватит все эти действия, так как их свойство статуса будет равно 401. Затем пользователь перейдет на страницу входа в систему с помощью вызова history.pu sh () внутри этого редуктора:
import { history } from '../routers/AppRouter'
export default (state = {}, { status }) => {
if (!status) return state
switch (status) {
case 401: {
history.push('/login')
break
}
default: {
}
}
return state
}
Однако, как я уже ожидал, но надеялся на ложь, это невозможно, поскольку редуктор не имеет побочных эффектов ... В результате я получаю следующую ошибку:
Error: You may not unsubscribe from a store listener while the reducer is executing.
Мой вопрос, таким образом, заключается в том, есть ли способ заставить это работать внутри редуктора? Или есть какой-то другой способ сделать это. Я действительно хотел бы избежать необходимости вставлять следующий код в каждое асинхронное действие c:
if (response.status === 401) history.push('/login')