Здравствуйте, когда я инициализирую свое приложение и запускаю его, я не получаю никакого состояния в моих селекторах.В любом случае я установил начальное состояние по умолчанию и передаю его своему редуктору, потому что они являются первыми, которые подписываются на хранилище, когда приложение является init, и они предоставляют начальное состояние, но мой селектор не получает никакого состояния.Также я подключил свое состояние к своему редуктору с помощью StoreModule.forFeature(GlobalState.stateName, globalReducer)
, я даже использую ngrx
devtools, но для отслеживания состояния, но исходное состояние остается пустым, у меня действительно заканчиваются идеи, почему такое поведение
Я пыталсяdevtools для отслеживания моего состояния, я пытался отладить мой селектор и проверять при получении новых значений, но этого не происходит.
Действие:
import { Action } from '@ngrx/store';
import { HttpErrorResponse } from '@angular/common/http';
export const GlobalActionTypes = {
HandleError: '[HttpResponseError] This will handle errors from serivces',
LoadingScreen: '[Loading] This will show loading screen'
}
export class HandleErrorAction implements Action {
readonly type: string = GlobalActionTypes.HandleError;
constructor(public payload: HttpErrorResponse) { }
}
export class LoadingScreenAction implements Action {
readonly type: string = GlobalActionTypes.LoadingScreen;
constructor(public payload: boolean) { }
}
Редуктор:
import { Action } from '@ngrx/store';
import { GlobalActionTypes, LoadingScreenAction } from
'../actions/global.actions';
import { GlobalState } from '../state/global.state';
import { ActionsMap } from 'src/app/core/models/reducer.model';
const initialState: GlobalState = {
isLoading: false,
}
function loadingScreen(
state: GlobalState,
action: LoadingScreenAction): GlobalState {
const newState = Object.assign({}, state);
newState.isLoading = action.payload;
return newState;
}
export const mapToReducer: ActionsMap<GlobalState> = {
[GlobalActionTypes.LoadingScreen]: loadingScreen
}
export function globalReducer
(state: GlobalState = initialState, action: Action) {
mapToReducer[action.type] ? mapToReducer[action.type](state, action) : state
}
Состояние:
export class GlobalState {
static stateName: string = 'Global State'
isLoading: boolean;
}
Селекторы:
import { createFeatureSelector, createSelector } from '@ngrx/store';
import { GlobalState } from '../state/global.state';
export const featureSelector = createFeatureSelector<GlobalState>
(GlobalState.stateName);
export const loadingScreenSelector = createSelector(
featureSelector,
state => state.isLoading
);
AppModule imports: [
StoreModule.forRoot({}),
StoreModule.forFeature(GlobalState.stateName, globalReducer),
]
У меня есть служба, которая использовала для отправки действия одно с истиной, а другое с ложным.Затем я использую HTTP_INTERCEPTOR
и слушаю запросы.Каждый раз, когда появляется новый запрос, я использую сервис для отправки действия с полезной нагрузкой true.И когда запрос (не имеет значения, успешен он или нет), я отправляю действие с полезной нагрузкой false.Действия отправляются, я даже иду в редуктор, когда я проверяю, что newState имеет правильную полезную нагрузку.Но селекторы ничего не получают, когда состояние изменяется.Я действительно попробовал все, и у меня заканчиваются идеи.Любые предложения приветствуются.(