web-dev-qa-db-ja.com

Angular 5 ngrx Effectエクスポートされたメンバー「ofType」はありません

Ngrx状態マネージャーにエフェクトを実装しようとしています。現在、Angular v5.2.1ngrx v4.1.1rxjs v5.5.6を使用しています。たとえば「古い」説教を試みた

@Effect() login$: Observable<Action> = this.actions$.ofType('LOGIN')
.mergeMap(action =>
  this.http.post('/auth', action.payload)
    // If successful, dispatch success action with result
    .map(data => ({ type: 'LOGIN_SUCCESS', payload: data }))
    // If request fails, dispatch failed action
    .catch(() => of({ type: 'LOGIN_FAILED' }))
);

しかし、エラーProperty 'mergeMap' does not exist on type 'Actions<Action>'が発生しました。そこで、新しいpipeメソッドを使用しました。問題は、ofType演算子をインポートしようとするときです。

// ...
import { Action } from '@ngrx/store';
import { Effect, Actions, ofType } from '@ngrx/effects';

import { map, mergeMap, catchError } from 'rxjs/operators';
import { of } from 'rxjs/observable/of';

@Injectable()
export class WifiEffects {

  @Effect()
  getWifiData: Observable<Action> = this.actions$.pipe(
    ofType(WifiTypes.getWifiNetworks),
    mergeMap((action: GetWifiNetworks) =>
      this.mapService.getWifiNetworks().pipe(
        map((data: WifiNetworks) => new GetWifiNetworksSucc(data)),
        catchError(() => of(new GetWifiNetworksErr()))
      )),
  );

  constructor (
    private actions$: Actions,
    private mapService: GoogleMapDataService
  ) {}

}

Iamにエラーが発生しましたModule '".../node_modules/@ngrx/effects/effects"' has no exported member 'ofType'.何かアイデアはありますか?

8
tprieboj

@ ngrx/effects API を見ると、このライブラリがofTypeのlettableバージョンを実装しているという兆候はないため、2番目の実装は機能しません(少なくともofTypeパイプ内)。

最初の実装ではmergeMapのインポートがありません

_import 'rxjs/add/observable/mergeMap';
_

そしておそらくmapcatch

_import 'rxjs/add/observable/map';
import 'rxjs/add/observable/catch';
_

ofTypepipeとともに使用する場合、これはおそらく機能します

_@Effect()
getWifiData: Observable<Action> = 
  this.actions$.ofType(WifiTypes.getWifiNetworks)
    .pipe(
      mergeMap((action: GetWifiNetworks) =>
      ...
_

ofType()は、_.pipe_がすでにプロトタイプに追加されているObservableを返すためです。


脚注

Githubのソースコードを調べた後(2018年1月22日)、lettable ofTypeのエクスポートがここに見つかりました platform/modules/effects/src/index.ts

しかし、_@ngrx/effects@latest_でインストールすると(ver 4.1.1が表示されます)、インストールされたnode_modulesフォルダーの下にこのエクスポート参照が表示されません。

私のコンポーネントでは、_import { ofType } from '@ngrx/effects';_も使用できません。

7
Richard Matsen

ドキュメントが毎晩のリリースを反映しているようです。

https://github.com/ngrx/platform/issues/727

毎晩のリリースはこちらから入手できます: https://github.com/ngrx/effects-builds

2
Tucker