如何在获取数据订阅数据后如何派遣操作



获得订阅数据后,我想在下面派遣操作。但是,订阅和调度都异步执行,没有链条被迫下注。订阅和派遣。也无法描述在订阅中的派遣,因此会导致无限循环。

当我从订阅中获取某些数据时,要派遣操作的更好方法是什么?

我当前的代码是

// MyApp.ts
ngOnInit() {
    this.store.subscribe(appState => {
        this.userId = ppState.currentUserId;
    )};
    this.store.dispatch(new LoadInitialData(this.userId);
    data$ = this.store.select('data');
}

我可能的解决方案只是在@effect((...

中实现
// MyApp.ts
ngOnInit() {
    this.store.dispatch(new LoadUserId());
}
//MyEffectService.ts
@Effect() loadUserId$ = this.actions$
    .ofType(LOAD_USER_ID)
    .withLatestFrom(this.store.select('userId')
    .map([any, userId] => userId)
    .map(userId => new LoadInitialData(userId));
this.store
  .map(appState => ppState.currentUserId)
  .do(userId => this.store.dispatch(new LoadInitialData(userId))
  .subscribe(userId => this.userId = userId);

使用集合立即使用它应该在循环中进行派遣事件

this.store.subscribe(appState => 
    setImmediate(() => {
        this.userId = ppState.currentUserId
        this.store.dispatch(new LoadInitialData(this.userId)
    })
))

您提到的"可能"解决方案看起来不错。

这是一个很好的做法,可以使您的智能组件(或容器(保持简单,而没有太多业务逻辑。

这就是为什么,我建议您将您的操作重命名为"加载"或" initview"," open" ...以更好地匹配真实的动作。(此处的视图初始化或视图打开...(。将来,您可以想象在初始化组件时做更多的事情(不仅仅是加载用户数据...(。您的代码内部组件将保持简单,只有一个动作派遣。业务逻辑保留在您的效果中。

关于这一点,请查看Mike Ryan的这次良好会议:与NGRX

的好动作卫生

然后,使用效果来派遣另一个动作(负载需要数据...(听起来很不错。

示例(没有新效果/动作创建者语法(:

// MyApp.ts
ngOnInit() {
  this.store.dispatch(new Init());
}
// MyEffectService.ts
@Effect() 
init$ = this.actions$
  .ofType(Init)
  .withLatestFrom(this.store.select(selectors.getUserId)
  .map([any, userId] => userId)
  .map(userId => new LoadInitialData(userId));

ps:另一种良好的做法也是始终使用selector检索您的状态。(在上面的示例中,我使用了selectors.getUserId(

相关内容

  • 没有找到相关文章

最新更新