【问题标题】:Ngxs store is loosing state after pressing F5 to refresh the browserNgxs 商店在按 F5 刷新浏览器后处于丢失状态
【发布时间】:2020-03-11 23:11:46
【问题描述】:

我试图在页面刷新之间保留状态,但它似乎丢失了状态信息。我正在尝试保存两个布尔值并检索它。我已经为 chrome 安装了 NGXS Dev 工具来检查状态。我可以看到该操作正在正确发送状态信息,但是当我按 F5 时会丢失该信息。我错过了什么?

动作

import { AgreementsStateModel } from '../models/agreements-state.model';

export class SetAgreementStatus {
    static readonly type = '[AGREEMENT] SetAgreementStatus';
    constructor(public payload: AgreementsStateModel) {}
}

状态

 import { Action, Selector, State, StateContext } from '@ngxs/store';
    import { AgreementsStateModel } from '../models/agreements-state.model';
    import { SetAgreementStatus } from './agreement.actions';



@State<AgreementsStateModel>({
  name: 'agreementModalState',
  defaults: {
       isDeferred: false,
       isInteracted: false
  }
})
export class AgreementState {

  constructor() { }

  @Selector()
  static agreement(state: AgreementsStateModel) {
    return state;
  }

  @Action(SetAgreementStatus)
  setAgreementStatus({ patchState }: StateContext<AgreementsStateModel>, { payload }: SetAgreementStatus) {
    patchState(payload);
  }
}

AppModule 导入

NgxsStoragePluginModule.forRoot()

调度状态

  this.store.dispatch(new SetAgreementStatus({isInteracted: true, isDeferred: true}));

读取状态信息

     @Select(AgreementState.agreement) agreementModalState$: Observable<AgreementsStateModel>;

  this.agreementModalState$.subscribe(agreementModalStatus => {
      this.agreementModalStatus = agreementModalStatus;
    });

【问题讨论】:

    标签: angular ngxs


    【解决方案1】:

    因此,NGRX 存储不会在刷新期间保留信息。您必须使用用户 localStorage 或其他本地存储来存储此信息。

    您可以这样做的一种方法是在您的减速器中,您还可以将您在商店中设置的相同信息存储在用户localStorage 中,然后当您刷新时,您可以获取您存储的任何信息,并填充您的商店.

    有许多库尝试简化此操作,例如 ngrx-store-localstorage,它们同步商店和用户 localStorage,因此您不会在刷新之间丢失状态

    但默认情况下,ngrx 商店不会在页面刷新之间保存信息

    【讨论】:

    • Smokey Dawson 所说的大部分内容都绝对正确,但我要指出 Tom 正在利用与 NGRX 不同的 NGXS。请查看 NGXS 文档上的此页面以获取正确的插件。 ngxs.io/plugins/storage
    • 实际上,既然我已经阅读了您的帖子,我发现您正在利用正确的插件。我在这里没有看到任何明显的错误。或许发个 stackblitz 复现,我们可以看看?
    • 另外,请确认您在 NgxsModule.forRoot() 方法中有您的状态类....
    猜你喜欢
    • 1970-01-01
    • 2020-07-28
    • 2019-03-24
    • 2011-02-01
    • 1970-01-01
    • 2023-03-27
    • 2018-03-22
    • 2018-01-09
    • 2016-05-30
    相关资源
    最近更新 更多