web-dev-qa-db-ja.com

selectSnapshotの使い方は?

状態にトークンがあるかどうかをチェックするガードがあります。

canActivate(): boolean {
const token = this.store.selectSnapshot((state: AuthenticationState) => state.token);
  if (!token) {
    return true;
  }

  this.router.navigate(['home']);
  return false;
}

それから私はこのようなものを持っています:

export class AuthenticationState {
  @Selector()
  static token(state: AuthenticationStateModel) {
    return state.token;
  }
}

エラーが発生します。プロパティ「トークン」はタイプ「AuthenticationState」に存在しません

ここでの間違いは、ラムダの状態パラメーターがAuthenticationStateであり、実際にはAuthenticationStateの親であるアプリケーション全体の状態であると想定していることです。むしろ、次のようにセレクターを渡す必要があります。

canActivate(): boolean {
const token = this.store.selectSnapshot(AuthenticationState.token);
  if (!token) {
    return true;
  }

  this.router.navigate(['home']);
  return false;
}

数日前にNGXSの作者によるこの正確なトピックに関する投稿が実際にありました: https://medium.com/@amcdnl/authentication-in-ngxs-6f25c52fd385

11
Mark Whitfeld