私はreact-router
のonEnter
フックを使って認証をチェックしようとしています。 基本的には、onEnter
フックでSSOログインを開始するために、Reduxストアにサガアクションをディスパッチします。反応ルータonEnterの状態変化を待つ方法は?
しかし、私は認証に成功するとリダイレクトされますが、これはコンポーネントがマウントされた直後に発生するため、ちらつきがあります。 onEnter
フックのcallback
を呼び出す前に認証状態を確認しようとしましたが、それでも機能しませんでした。
私のようにフックを適用します。
<Route path='home' component={HomePage} onEnter={checkAuthentication(store)} />
、その後、私はそれを実装:私のサガで
const checkAuthentication = (store) => {
return (nextState, replace, next) => {
if (!store.getState().authentication.isAuthenticated)
store.dispatch(checkAuth())
return next()
}
}
を、私は持っている:
const isAuthenticated = yield call(getAuthenticationToken) // returns a promise which resolves when the user has successfully authenticated on the SSO page
yield put(actions.checkAuthSuccess(isAuthenticated))
どのように私はそれを確認することができますサガが認証ステータスを返さない限り、コンポーネントはマウントされませんか?
ご協力いただければ幸いです。
また、反応ルータのどのバージョンを使用していますか? –
あなたのお返事ありがとう@ ej-mason、私は反応ルータv3を使用しています。 また、スピナーを表示する別のコンポーネントにユーザーをリダイレクトするという考えは実行可能な解決策であり、私はそれが好きです。 私はHOCの内部でこのロジックをラップし、そこにスピナー/ローダーを表示しようとすることもできますが、ユーザーが認証されたことを示す後に_next_コールバックを呼び出すので、このプリロードasync sagaを使用してもコンポーネントの – Hawkes
非同期イベントループの仕組みのために、次は、サガが実行される前に呼び出されています。非同期関数は、すべての同期コードが終了してから実行されるまで待機する必要があります。 –