19

を使用する反応アプリを作成しており、認証エラーをグローバルにキャッチするためapollo-clientに使用しています。ブラウザの履歴操作とアプリの状態の管理にapollo-link-error使用しています。createBrowserHistoryredux

認証エラーで、ユーザーをページにリダイレクトしたい/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()この状況を処理する適切な方法は何ですか?

4

1 に答える 1