ホームページ > ウェブフロントエンド > jsチュートリアル > ユーザーのログアウト時に Redux ストアの状態を適切にリセットするにはどうすればよいですか?

ユーザーのログアウト時に Redux ストアの状態を適切にリセットするにはどうすればよいですか?

DDD
リリース: 2024-12-01 00:28:11
オリジナル
109 人が閲覧しました

How to Properly Reset a Redux Store State Upon User Logout?

ユーザーのログアウト時に Redux ストアの状態をリセットする

Redux では、ストアはアプリケーションの状態を維持します。ユーザーがログアウトしたときにストアが初期状態にリセットされるようにすることは、キャッシュの問題やデータ汚染を防ぐために不可欠です。

これを実現するには、カスタム ルート リデューサーを作成するアプローチが 1 つあります。これは、アクションの処理を、combineReducers() によって生成されたリデューサーに委任します。ただし、USER_LOGOUT アクションが発生すると、初期状態が返されます。

次のような rootReducer があると仮定します。

const rootReducer = combineReducers({
  // Your app's top-level reducers
});
ログイン後にコピー

その名前を appReducer に変更し、 appReducer に委任する新しい rootReducer:

const appReducer = combineReducers({
  // Your app's top-level reducers
});

const rootReducer = (state, action) => {
  return appReducer(state, action);
};
ログイン後にコピー

次に、 rootReducer は、USER_LOGOUT アクションを受信したときに初期状態を返します。 Reducer は、アクションのタイプに関係なく、最初の引数として unfineed を指定して呼び出された場合に初期状態を返すことが知られています。この動作を利用できます:

const rootReducer = (state, action) => {
  if (action.type === 'USER_LOGOUT') {
    return appReducer(undefined, action);
  }

  return appReducer(state, action);
};
ログイン後にコピー

この変更により、すべての Reducer は USER_LOGOUT 時に再初期化され、オプションで action.type に基づいて異なる状態を返すことができます。

Ifアプリケーションは redux-persist を使用しているため、保存された状態もクリアする必要がある場合があります。

const rootReducer = (state, action) => {
  if (action.type === 'SIGNOUT_REQUEST') {
    // Remove the persisted state for all keys defined in your persistConfig(s)
    storage.removeItem('persist:root');
    // storage.removeItem('persist:otherKey');

    return appReducer(undefined, action);
  }

  return appReducer(state, action);
};
ログイン後にコピー

このアプローチにより、ユーザーがログアウトすると、メモリ内の Redux ストアと保存された状態の両方がリセットされ、後続のユーザー セッションではクリーンな状態が維持されます。

以上がユーザーのログアウト時に Redux ストアの状態を適切にリセットするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート