NGRX - Каков наилучший способ сбросить все состояние? - PullRequest
1 голос
/ 26 сентября 2019

Каков наилучший способ сбросить все состояние, когда у нас есть разные редукторы?У меня проблемы с этим, когда я использую селекторы, так как он не возвращает мне начальное состояние, когда я делаю сброс

MetaReducer

import { ActionReducer } from '@ngrx/store';
import { UserActionTypes } from '../../actions/actionTypes';

export function clearStateReducer(reducer: ActionReducer<any>): ActionReducer<any> {
  return (state, action) => {
    if (action.type === UserActionTypes.Logout) {
      state = undefined;
    }
    return reducer(state, action);
  };
}

Модуль состояния

import { NgModule } from '@angular/core';
import { StateService } from './state.service';
import { StoreDevtoolsModule } from '@ngrx/store-devtools';
import { StoreModule } from '@ngrx/store';
import { appReducer } from './reducers';
import { getInitialState } from './state';
import { metaReducers } from './reducers/metaReducers';

@NgModule({
  imports: [
    StoreModule.forRoot(appReducer, {
      initialState: getInitialState(),
      metaReducers,
      runtimeChecks: {
        strictStateImmutability: false,
        strictActionImmutability: false,
        strictStateSerializability: false,
        strictActionSerializability: false
      }
    }),
    StoreDevtoolsModule.instrument({
      maxAge: 25
    })
  ],
  providers: [StateService]
})
export class StateServiceModule {}

Ответы [ 2 ]

0 голосов
/ 26 сентября 2019

Вы не можете назначать состояние, вместо этого вызывайте редуктор с помощью undefined:

export function clearStateReducer(reducer: ActionReducer<any>): ActionReducer<any> {
  return (state, action) => {
    if (action.type === UserActionTypes.Logout) {
      return reducer(undefined, action);
    }
    return reducer(state, action);
  };
}
0 голосов
/ 26 сентября 2019

Вы можете сбросить, как это, установив состояние обратно в исходное состояние

export const postReducer = createReducer(
  initialState,
  on(PostActions.ResetState, (state) => {
    return { state: initialState };
  }),
);
...