2016-08-05 9 views
1

NgrxとAngular2を使用してモバイルアプリを構築しています。自分のアプリケーションからユーザーがログアウトしたときにStoreをクリアしたいのですが?誰でもこれを行う方法を知ることができますか?#ngrxの状態をクリアするには?

答えて

-1

これを行う方法は、ストアが登録されているコンポーネントを使用することです。値が変更されたときに、コンポーネントを破棄してinitを強制的に実行する可能性のあるルータのアウトレットまたは構造ディレクティブに置きます。

ストアはコンポーネントのプロバイダとして登録されています(私が間違っている場合を除きます)、それに結び付ける必要があります。コンポーネントが破棄され、新しいコンポーネントで新しいコンポーネントが作成されると破棄する必要があります。ちょっとした考え。私はそれをテストする時間がなかった。

プロバイダを親コンポーネントに登録しないでください。私は注射液が階層を通って働くと信じています。

+0

を私はダウン投票を理解していません。これは正当な潜在的な答えです。それがうまくいかない場合は、コメントに追加してください。それがあなたが望む答えのタイプでないなら、あなたはあなたの質問でより具体的にする必要があります。 – wiredprogrammer

5

あなたのレデューサーのそれぞれに明確な行動が必要です。これにより、店舗内のそれぞれのプロパティが消去されます。 logoutに電話するときは、手動で各レデューサーのクリアアクションを送信してください。私は店が一人できれいにするオプションがあれば、今は分かりません。

代替: より洗練された、より速いアプローチがあります。あなたがstore.dispatch経由で行動を呼び出すたびに、そのすべてのあなたのレデューサーがaction.typeでコールします。あなたの行動タイプの名前がCLEARであるとします。あなたのレデューサーのそれぞれにこのアクションを入れて、ストアのそれぞれの特性をクリアしてください。 store.dispatchaction.type = 'CLEAR'と呼び出すと、ストアのすべてのプロパティがクリアされます。

わかりやすい場合は、コードで説明しようとします。

+0

古い状態はまだ保存されていないのですか(状態から時間旅行を許可する機能)? "クリアされた"オブジェクトはまだメモリに保存されませんか? –

3

解決策は、ルートレデューサーを書き込むことです。

それは、これに似ています:

export function reducer(state: any, action: any): ActionReducer<any> { 
    if (action.type === 'CLEAR STATE') { 
     state = undefined; 
    } 

    return appReducer(state, action); 
} 

はこれを確認してください:How to reset the state of a Redux store?

関連する問題