私はIStore
のtransaction
コンセプトを追加しました。保留中の操作が保留されている私のIStore
に格納する手段を提供することは、直接的に意味します。それらが完了すると、それらは削除されます。Ngrx:メタレデューサーとキャプチャ効果
export interface IStore {
user: IUser;
txs: ITxRedux;
}
すべての私のレデューサーは似ています:
* reducer name: `'OPERATION'`
* success reducer name: `'OPERATION_SUCCESS'`
* failed reducer name: `'OPERATION_FAILED'`
これらの減速の一部(のみがHTTPリクエストを必要とする)@Effects
を用いて撮影されています
@Effect({ dispatch: true })
userLogin$: Observable<Action> = this._actions$
.ofType('USER_LOGIN')
.switchMap((action: Action) =>
{
....
});
現在、私のエフェクトはこのパターンを持っています:
return make_http_call
.map(_ => ({type: 'OPERATION_SUCCESS'}, payload: {...}))
.catch(_ => ({type: 'OPERATION_FAILED'}, payload: {...}));
このように、エフェクトが呼び出されるか、完了するたびに、IStore.txs
に"transaction"
を追加または削除する方法をご希望です。私は"add a transaction into my IStore.txs"
を言うとき、私はtransaction
レデューサーを呼び出すことを意味:
public static ADD_TX = `ADD_TX`;
private static addTx(txsRdx: ITxRedux, type, payload: ITx) {
const tx = payload;
return {
ids: [ ...txsRdx.ids, tx.id ],
entities: Object.assign({}, txsRdx.entities, {[tx.id]: tx}),
};
}
public static REMOVE_TX = `REMOVE_TX`;
private static removeTx(txsRdx: ITxRedux, type, payload) {
const tx: ITx = payload;
var entitiesTmp = {...txsRdx.entities};
delete entitiesTmp[tx.id];
return {
ids: txsRdx.ids.filter(id => tx.id != id),
entities: entitiesTmp
};
}
私はメタレデューサーについて少し話を聞いてきましたが、私はかなり彼らは私の目標を得ることができるとしているしていないかどうか。
エレガントな方法で入手する方法はありますか?