Реакция Redux: перенаправить пользователя (history.pu sh ()) при получении определенных кодов состояния http во время асинхронного действия c (thunk) - PullRequest
0 голосов
/ 05 апреля 2020

У меня есть много асин 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')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...