У меня есть следующий код, который использует ngrx для управления состоянием. Я относительно новичок в ngrx, и хотя я понимаю, что this.store.select используется для подписки на любое изменение состояния, у меня есть следующий вопрос.
а) Если мы вызываем функции отправки одну за другой, как в приведенном ниже фрагменте внутри функции выбора, не приведет ли это к бесконечному циклу (учитывая, что Action1, Action2 относятся к изменению одного и того же состояния и this.store.select(locationState => locationState.countriesState) продолжает выполняться с момента изменения состояния)? будет ли когда-либо вызвано третье утверждение? Является ли отправка синхронной функцией?
this.store.dispatch('Action1');
this.store.dispatch('Action2');
this.router.navigation(['/confirm-region'],{relativeTo: this.route.parent })
регионкомпонент.ts
import { Subscription } from 'rxjs/Subscription';
export class RegionComponent implements OnInit,OnDestroy {
storeSubscriptions = <Subscription[]>[];
constructor(private store : Store<TestState>)
{
}
ngOnInit() {
this.storeSubscriptions.push(
this.store.select(locationState => locationState.countriesState).subscribe(state =>
{
this.region = state.region,
if (state.Status == true)
{
this.store.dispatch('Action1');
this.store.dispatch('Action2');
this.router.navigation(['/confirm-region'],{relativeTo: this.route.parent })
})
}
}
Редукторлист.ts
import {ActionReducerMap} from '@ngrx/store';
export interface TestState
{
countriesState : countriesState
}
export const reducers : ActionReducerMap<TestState> =
{
countriesState : countriesStateReducer
}
страныStateReducer.ts
export function countriesReducer(state : countries,action: Action)
{
switch action.type {
case Action1:..
case Action2:..
}
}
🤔 А знаете ли вы, что...
JavaScript поддерживает работу с различными форматами данных, такими как JSON и XML.
Если мы вызываем функции отправки одну за другой, как в приведенном ниже фрагменте внутри функции выбора, не приведет ли это к бесконечному циклу (учитывая, что Action1, Action2 относятся к изменению одного и того же состояния, а this.store.select(locationState => locationState.countriesState) продолжает получать выполняется после изменения состояния)?
Это зависит. Вы можете разорвать петлю, отписавшись от нее. И я думаю, что отписка происходит в хуке onDestroy. (Пожалуйста, дайте мне знать, если это неправильно, но ваш пример выглядит так). Если вы никогда не отмените подписку, вы войдете в бесконечный цикл.
будет ли когда-либо вызвано третье утверждение? Является ли отправка синхронной функцией?
Да, назовут. И я думаю, что это причина, по которой ваш код все еще работает, не зависая в бесконечном цикле. Когда вы вызываете router.navigate, текущий компонент get уничтожается (я думаю, но это выглядит так, пожалуйста, проверьте самостоятельно), потому что загружен другой маршрут. Это означает, что текущий компонент отписывается от изменений состояния и прекращает отправку действий и навигацию.