反応している状態に基づいてユーザーをリダイレクトする、私のルータは、このようになります。オンボーディングフロー(ユーザ名の選択など)。しかし、私はこれらの条件付きリダイレクトの多くが将来必要になると思います。これらの条件付きリダイレクトを処理する最良の方法は何ですか?すべてのリダイレクトを処理する単一のコンポーネントを持つことは可能ですか?今
Q
今
5
A
答えて
0
あなたは、ユーザーがログインして、ちょうどことをインポートしているかどうかを確認する機能を持つことができる:
import {browserLocation} from './browser-location'
export default function checkLoggedIn() {
if (localStorage.jwt === null)
browserLocation.pushState('/login')
}
1
<Route>
sがルートマッチと呼ばれるonEnter
フックを受け入れるを。フックは次のようになります。
function requireAuth(nextState, replace) {
if (!loggedIn()) {
replace({ pathname: 'login' });
}
}
そして、そのようにそれを使用する:あなたは、複数のチェックを組み合わせることができます
<Route path="/" component={AppPage}>
<Route path="home" component={HomePage} onEnter={requireAuth}/>
<Route path="login" component={LoginPage}/>
</Route>
より構成可能例:
function checkAuth() {
if (!loggedIn()) {
return { pathname: 'login' };
}
}
function checkOnboarding() {
if (!completedOnboarding()) {
return { pathname: 'onboarding' };
}
}
function redirect(...checks) {
return function(nextState, replace) {
let result;
checks.some(check => {
result = check();
return !!result;
});
result && replace(result);
};
}
その後、結合する!
<Route path="/" component={AppPage}>
<Route path="home" component={HomePage}
onEnter={redirect(checkAuth, checkOnboarding)}/>
<Route path="login" component={LoginPage}/>
<Route path="onboarding" component={OnboardingPage}
onEnter={redirect(checkAuth)}/>
</Route>
+0
+1、これは良いアプローチですが、私を悩ますのは、replaceがウィンドウ全体をリフレッシュし、これがSPAスタイルに含まれていないことだけです。 –
関連する問題
- 1. 今
- 2. momentjs日付が今週、今月か今年の場合
- 3. wp_get_archivesフィルタ:今月、先月/今年、昨年
- 4. Android 30日今日から今日
- 5. 今2
- 6. 今日
- 7. は今
- 8. dateutil.rrule.rrule.between()今
- 9. 今laravel5.4
- 10. 今年、今週、今月、今四半期に基づいて売上を集計する最速の方法は?
- 11. は今のListView
- 12. のdivタグ今
- 13. 今回のタイプ
- 14. 今週のデータ
- 15. なぜ今org.apache.cxf.interceptor.Fault
- 16. 今日* ngFor
- 17. 今後は
- 18. 今LINQの
- 19. 今、この上
- 20. は:今日@Autowired
- 21. XTS - 今日
- 22. 今値セッション
- 23. メモリリークが今C++
- 24. WPクエリ、今日
- 25. のonchange今
- 26. 今配列
- 27. 今蒸気
- 28. GUIは今
- 29. 今のC
- 30. は今mongoidコール
私は手動でURLをこのように正しく解析する必要がありますか?私は 'if(localStorage.jwt === null &&!window.location.pathname.match(/^\/login(\/| $)/))'を必要とします。 'これを行い、それでも使用する方法はありますかURLを解析するためにルータに反応しますか? –
私は答えを再表示しました。したがって、この関数をインポートし、ルーティングするコンポーネントのレンダー部分で呼び出すだけです。 –