私はそれに夢中になっていると伝えなければなりません。私はAngularFire2(v.5)でFirebaseからデータを取得しようとしていますが、@ ngrx/effectsでそれを扱い、@ ngrx/storeに保存しています。その後、firefbaseからArrayFire2(v5)とngrxエフェクトを使用してリストを取得する
spaces.effects.ts
@Effect()
getSpaces$ = this.actions$.ofType(SpacesActions.GET_SPACES_REQUEST)
.switchMap((action: SpacesActions.GetSpacesRequest) => {
return this.afs.list<Space>('/spaces').snapshotChanges()
.switchMap(actions => {
console.log('action is ', actions);
return actions.map(space => {
const $key = space.payload.key;
const data: Space = { $key, ...space.payload.val() };
console.log('snapshot is: ', data);
return new SpacesActions.GetSpacesSuccess(data);
});
}
);
私の「アクション」データとキーが付属しています:私は、キーを使用してデータを必要とするだけでなく、効果の私のコードは次のようになりますアイテムを簡単に更新したり削除したりできるので、各アイテムのキーを取得できます。私のデータベースには3つのキーがある3つのアイテムがあります。このコードを実行してログに記録すると、最初はペイロードで1つの配列のすべての項目が表示され、2番目のログでは各ペイロードがスナップショットとして表示されます。
私がGetSpacesSuccessを呼び出すと、私が(キーとアイテムで)取得したすべてのスナップショットを送信して保存したいと思います。私がやっているやり方は、今度はこのアクションを3回派遣し、最初のものが第2のものによって上書きされるので、画面上に2つのアイテムしか見ることができません。
したがって、2つの質問:キーを使ってfirebaseからアイテムを取得し、@ngrxでそれらを保存する簡単な方法はありますか?そうでなければ、最初のアイテムがオーバーライドされ、アクションが3回ディスパッチされている間違ったことは何ですか?
私が学んでいるように、私はそれに最善を尽くしています。ありがとうございました!
spaces.reducers.ts
case SpacesActions.GET_SPACES_REQUEST:
return {
state,
spaces: null,
loading: true
};
case SpacesActions.GET_SPACES_SUCCESS:
return {
...state,
...action.payload,
spaces: [state, action.payload],
loading: false
};
spaces.actions.ts
export class GetSpacesRequest implements Action {
readonly type = GET_SPACES_REQUEST;
}
export class GetSpacesSuccess implements Action {
readonly type = GET_SPACES_SUCCESS;
constructor(public payload: Space) {} <<<<<HERE I'D LIKE TO GET THE FULL ARRAY WITH EACH KEY
}
私はあなたを助けました。ここでのいくつかの点は、ツリーの振る舞いによってバンドルのサイズが大幅に縮小されるので、 'pipe'を使って' rxjs'を扱って、 '効果'を変更します。 [この記事で](https://blog.angularindepth.com/rxjs-understanding-lettable-operators-fe74dda186d3?gi=3218b91fbbac)をご覧ください。一般的に、 '効果'では、単にいくつかのサービスを呼び出し、成功アクションやいくつかのデータを返す他のアクションを出す一方で、「還元プロセス」では、必要なものを返すためにそのデータを再生します。 yoyur 'store.select(...)'をコンストラクタに移動します。 – AndreaM16
[ngrx-platform sample app](https://github.com/ngrx/platform/tree/master/example-app)に従ってください。 – AndreaM16
あなたのポイントを得ました。私はそれらを適用しました。あなたのコメントをありがとう。 –