【问题标题】:NgRx Effect Not FiringNgRx 效果未触发
【发布时间】:2019-07-02 01:20:05
【问题描述】:

鉴于这个外观:

@Injectable()
export class LookupDataFacade
{
    public saved$: Observable<boolean>;
    public loaded$: Observable<boolean>;
    public allLookups$: Observable<ILookup[]>;
    public selectedLookup$: Observable<ILookup>;

    constructor( protected store: Store<LookupDataPartialState> ) { }

    loadAll()
    {
        this.store.dispatch( new LoadLookupData() );
    }

    ...
}

还有这个效果类:

@Injectable()
export class LookupDataEffects
{
    constructor(
        protected actions$: Actions,
        protected dataPersistence: DataPersistence<LookupDataPartialState>,
        protected service: LookupDataService ) { }

    @Effect()
    loadLookupData$ = this.dataPersistence.fetch<LoadLookupData>( LookupDataActionTypes.Load,
    {
        run: ( action: LoadLookupData, state: LookupDataPartialState ) =>
        {
            return this.service.get().pipe( map( lookups => ( {
                type: LookupDataActionTypes.Loaded,
                payload: { data: lookups }
            } ) ) );
        },

        onError: ( action: LoadLookupData, error: HttpErrorResponse ) => { this.handleError( error ); }
        } );

    ...

    handleError = function( error: HttpErrorResponse )
    {
        console.error( 'Error', error );
        alert( error.message );
        return new LookupDataError( error );
    }
}

页面加载时,会调用外观的“loadAll”方法。动作被调度,但相应的效果永远不会被执行。

在我将 NgRx 和 Nrwl 包升级到最新版本之前,此代码可以正常工作(需要这样做以解决我遇到的“未捕获的类型错误:ctorParameters.map 不是函数”致命错误)。

我没有看到任何错误,也没有网络流量表明出现故障。

有人看到明显的错误吗?

【问题讨论】:

  • nrwl 与此有何关系?
  • 我在效果中使用了“DataPersistence”类。不确定它或 NgRx 内部的某些东西是否阻止了效果被调用。

标签: angular ngrx nrwl


【解决方案1】:

需要检查的一些事项:

  • LookupDataEffects 注册在 EffectsModule.forFeature([])
  • LookupDataActionTypes.Load 正确映射到 new LoadLookupData

这里还有一个小错误:

onError: ( action: LoadLookupData, error: HttpErrorResponse ) => { this.handleError( error ); }

我们必须=&gt; this.handleError( error )=&gt; { return this.handleError( error ); }

还有 fetch&lt;LoadLookupData&gt; 应该是fetch&lt;LoadedLookupData | LookupDataError &gt;(它是可以在 Effect 中调度的操作的返回类型)

【讨论】:

  • 感谢您查看此内容。虽然这并没有解决我的问题,但我确实修复了您上面提到的错误。最终,我将更改回滚到以前的版本,然后重新实现我的代码更改。它又开始工作了。
猜你喜欢
  • 1970-01-01
  • 2019-07-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-10-04
  • 1970-01-01
  • 1970-01-01
  • 2022-07-17
相关资源
最近更新 更多