useEffect 内では、ページが更新されると 2 つの条件付き分岐がトリガーされます
P粉798343415
P粉798343415 2023-09-03 14:09:00
0
2
410
<p>これは React コンポーネントの <code>useEffect</code> コードです。 </p> <pre class="brush:js;toolbar:false;"> import { useSession } from '@supabase/auth-helpers-react' const session = useSession() useEffect(() => { if (セッション) { console.debug('ページに留まる') } それ以外 { console.debug('ログインに移動') router.push('/login').then( () => { console.debug('ログイン完了へ移動') } ) } }, [セッション、ルーター]) </pre> <p>認証(セッション)の管理にはsupabaseを使用します。 </p> <p>ページを更新するときに非常に奇妙な問題が発生します (ルーターを介したログインとログアウトのリダイレクトにはまったく問題はありません。この問題はページが更新されたときにのみ表示されます)。両方のブランチに到達します。 js コンソールでは、2 つのブランチからログの条件分岐が確認できます。 </p> <p><code>「ページに留まる」</code> および <code>ログインに移動</code>/<code>ログイン完了に移動</code>。 </p> <ブロック引用> <p>これは、更新後に <code>session</code> が変更されたためだと思います。初めて未定義の場合、2 番目のブランチ <code>router.push</code> がトリガーされます。セッションが見つかると、最初のブランチ <code>stays on the page</code> がすぐにトリガーされます。 </p> </blockquote> <p>これを回避する方法について何か提案はありますか?それとも、React/NextJS でページの更新を処理するための 良い実践方法 はありますか?それとも、以前に同様または同じ問題に遭遇した人はいますか? </p>
P粉798343415
P粉798343415

全員に返信(2)
P粉035600555

ついに根本原因が分かりました。

これは supabase auth helper、これは非同期関数です。ロード中か間違っているかのステータスは含まれていません。つまり、最初にあることを意味します(ロード中であることを意味します)。読み込み中)。

この問題を解決する簡単な方法は、useSessionContext を直接使用することです。 session は引き続き非同期で取得されますが、isLoadingerror ステータスを同期的に取得してこの問題を解決でき、これらを useEffect で使用できます。 内の条件分岐。

新しいコードは次のようになります:

リーリー

いいねを押す +0
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!