首页 > 解决方案 > 如何在 ngrx/Store 减速器中使用其他 Angular11 服务作为初始状态?

问题描述

新的减速器和效果。基本上,我有这个减速器:

        const realColumnsReducer = createReducer<ColumnsState>(
          toData(AssetsColumns.columnsConfig),//here the service i need to use as a initial state
          on(setColumns, (state, action) => toData(action.columns)),
          on(setSelectedColumns, (state, action) =>
            toData(
              action.columns.map(x => ({
                ...x,
                enabled: true
              }))
            )
          )

这是我需要使用的 ijectble 服务的一部分

          columnsConfig: StatefulColumn[] = [
            {
              column: assetCategoryColumn,
              enabled: true
            },
         {
              column: assetCodeColumn,
              enabled: true
            }
        ].map((x, index) => ({ ...x, index, width: columnMinWidthPx } as StatefulColumn));

这里有我的效果

    @Effect()
      applyCompanyPreferences = this.actions$.pipe(
        ofType(applyCompanyPreferences.request),
        switchMap(() => this.store.select(currentIdentity).pipe(onlyTruthy(), take(1))),
        switchMap(identity => from(loadCompanyPreferencesFromIndexedDb(identity))),
        map(x =>
          x
            ? x.columns.map(z => ({ ...this.assetsColumns.columnsConfig[z.index], ...z } as StatefulColumn))
            : this.assetsColumns.columnsConfig
        ),
        mergeMap(x => [setColumns({ columns: x }), applyCompanyPreferences.success({ request: undefined })]),

如何将我的服务用作初始状态?

标签: angularreduxdependency-injectionngrx

解决方案


据我了解,您希望在第一时间使用该服务来更新状态。也许这就是你要找的东西:https ://ngrx.io/guide/effects/lifecycle#oniniteffects 。

除此之外,switchMap 和 store.select 的组合也不正确。此页面中的最后一个示例https://ngrx.io/guide/effects可以让您了解如何正确地做事。


推荐阅读