0
Iは、認証が必要なソースからデータをフェッチAngular2アプリを持っているので、アプリケーション・コンポーネントの初期化イベントは、認証トークンは次のようにフェッチを開始:ReplaySubject.next(value)はreduxストアの不変状態の原則に違反していますか?
import { Component, OnInit } from '@angular/core';
import { NgRedux } from '@angular-redux/store';
import { rootReducer } from './app.reducer';
import * as createLogger from 'redux-logger';
import { AppActions } from './app.actions';
import { createEpicMiddleware, combineEpics } from 'redux-observable';
import { UserEpics } from './users/user.epics';
import { ReplaySubject } from 'rxjs/ReplaySubject';
@Component({
selector: 'app-root',
templateUrl: './app.component.html',
styleUrls: ['./app.component.css']
})
export class AppComponent implements OnInit {
constructor(
private ngRedux: NgRedux<any>,
private actions: AppActions,
private userEpics: UserEpics,
) {
ngRedux.configureStore(
rootReducer,
{ user: { auth: { token$: new ReplaySubject(1) } } },
[
createLogger(),
createEpicMiddleware(combineEpics(...userEpics.epics)),
]);
}
ngOnInit() {
this.ngRedux.dispatch(this.actions.getAuthToken());
}
}
reduxがRxjs5 ReplaySubjectを記憶している、そしてこの主題になりますこのような減速からトークン値を与え:
case AppActions.GET_AUTH_TOKEN_DONE:
user.auth.token$.next(action.token);
return Object.assign({}, user, {
auth: {
isFetching: false,
token$: user.auth.token$,
reason: undefined
}
});
このコードは私のために働いているが、それは、Reduxの店の不変状態原理に違反していますか?
これは実際にはお勧めできません。実際にシリアル化していない場合でも、ストア内のすべてのものはシリアル化可能でなければなりません。あなたはそれについて宗教的である必要はありません - もしそれが今まで使用されていない事故に何かを含んでいたら - それに頼るのは悪い形です。そのすべては、義のための容易な明確な道がなければ、それを出荷するが、それを習慣にしないでください。少なくともそれは私の意見です。私はなぜSubjectを必要と感じているのかを知る必要があります。例えばあなたの叙事詩コード。あなたは、件名のない状態で店内にトークンを設定するだけのようですね。 – jayphelps
@jayphelpsありがとう、私はそれほど疑わしい。私は、ビューデータを取得するためにauthトークンに依存するコンポーネントを満たすためにこれを一時的に行いました。これを、[@ angular-redux/store](https://github.com/angular-redux/store/blob/master)を使用して、ストアの認証トークンのサブスクリプションによってコンポーネントルートが保護されているスキームに再設定しました/docs/select-pattern.md) –