Правильный способ и место для увлажнения NgRx Store с AuthToken от LocalStorage - PullRequest
1 голос
/ 14 марта 2019

Каков правильный способ увлажнения RxJS / NgRx от LocalStorage ?

Скажем, приложение должно знать, вошел ли пользователь, прочитав AuthToken из LocalStorage . И это должно произойти в первую очередь после инициализации NgRx Store.

Для этого сценария в AuthStore есть действие initAuth, связанный с которым Эффект с помощью службы заполняет состояние при чтении токена из LocalStorage .

В настоящее время я отправляю initAuth внутри ngOnInit AppComponent:

@Component({
    selector: 'app-root',
    ...
})
export class AppComponent implements OnInit {
    constructor(protected readonly store$: Store<State>) {
    }

    ngOnInit(): void {
        this.store$.dispatch(authActions.initAuth());          
    }
}

Но кажется, что должен быть лучший путь.

Я думал связать Эффект со следующим @ngrx/effects/init действием для отправки initAuth (если это возможно, как это может быть достигнуто?):

enter image description here

Примечание : я не использую ngrx-store-localstorage .

1 Ответ

1 голос
/ 14 марта 2019

Вы можете использовать действие ROOT_EFFECTS_INIT и делать все что угодно в эффекте.

import { ofType, Actions, Effect, ROOT_EFFECTS_INIT } from '@ngrx/effects';

class InitEffects {
  @Effect()
  init$ = this.actions$
    .ofType(ROOT_EFFECTS_INIT)
    .pipe(tap(() => window.alert('I should be shown')));

  constructor(private actions$: Actions) {}
}

Также обязательно зарегистрируйте эти эффекты в методе forRoot, функциональные модули не будут работать.

...