Я пишу приложение реагирования, которое использует apollo-client
, и я использую apollo-link-error
для обнаружения ошибок аутентификации во всем мире. Я использую createBrowserHistory
для управления историей браузера и redux
для управления состоянием моего приложения.
При ошибке аутентификации я хочу перенаправить пользователя на страницу /login
.
Однако, делая это с history.push('/login')
и forceRefresh: false, изменяет URL-адрес, но фактически не перемещается внутри моего приложения.
Если я использую forceRefresh:true
, это работает, но приложение полностью перезапускается, чего я бы хотел избежать.
const errorLink = onError(({ graphQLErrors, networkError }) => {
if(graphQLErrors[0].extensions.code == "UNAUTHENTICATED") {
// with forceRefresh:true this works, but causes a nasty
// reload, without the app doesn't navigate, only the url changes
history.push('/login')
}
});
`
let links = [errorLink, authLink, httpLink];
const link = ApolloLink.from(links);
const client = new ApolloClient({
link: link,
cache: new InMemoryCache(),
connectToDevTools: true,
});
Мне кажется, проблема в том, что я не использую redux-router
методы для навигации (поэтому приложение остается прежним, даже если URL-адрес изменяется)
Q: как получить объект redux history
, аналогичный использованию withRouter()
, когда я не нахожусь внутри компонента? Как правильно справиться с этой ситуацией?