Ngrx状態マネージャーにエフェクトを実装しようとしています。現在、Angular v5.2.1
、ngrx v4.1.1
、rxjs 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'.
何かアイデアはありますか?
@ ngrx/effects API を見ると、このライブラリがofType
のlettableバージョンを実装しているという兆候はないため、2番目の実装は機能しません(少なくともofType
パイプ内)。
最初の実装ではmergeMap
のインポートがありません
_import 'rxjs/add/observable/mergeMap';
_
そしておそらくmap
とcatch
も
_import 'rxjs/add/observable/map';
import 'rxjs/add/observable/catch';
_
ofType
をpipe
とともに使用する場合、これはおそらく機能します
_@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';
_も使用できません。
ドキュメントが毎晩のリリースを反映しているようです。
https://github.com/ngrx/platform/issues/727
毎晩のリリースはこちらから入手できます: https://github.com/ngrx/effects-builds