我在Firestore中维护了一个事件数据库。我使用AngularFire5来保持事件同步到我的应用程序。
活动有很多会话,可以更新我的多个管理员和用户(评分,问题等)。
我使用ngrx存储,缩减器和效果来维持同步。我能够找出单个会话更新/删除/添加。
问题是会话的初始加载返回会话[]。除此之外,快照更改可以返回“添加”,“修改”等。和'删除'会话。如何在会话不存在时添加单个动作+减少器功能,但在会话存在时更新或删除。 (我没有在我的firebase服务中调用store.dispatch,我使用效果来管理它)
session.effect.ts
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="img">
<img src="img.png">
<span class="rating">
<img src="staroff.png">
<img src="staroff.png">
<img src="staroff.png">
<img src="staroff.png">
</span>
</div>
session.reducer.ts
@Effect()
getSession: Observable<Action> = this.actions.ofType(SessionActions.ADD_SESSION)
.map((action: SessionActions.AddSession) => action.payload)
.switchMap(payload => this.db.getSessions(payload)
.map((sessions:Session[]) => new SessionActions.AddSessionSuccess(sessions))
);
session.actions.ts
export function SessionReducer(state: Session[], action: Action) {
// console.log('SessionsReducer :: Action Type: ' + action.type + ', Action Payload: ' + JSON.stringify(action.payload));
switch(action.type) {
case SessionActions.ADD_SESSION_SUCCESS:
return [ ...state, action.payload ];
case SessionActions.CREATE_SESSION_SUCCESS:
return [ ...state, action.payload ];
case SessionActions.UPDATE_SESSION_SUCCESS:
return state.map(session => {
return session.id === action.payload.id ? Object.assign({}, action.payload) : session;
})
case SessionActions.ADD_SESSION:
case SessionActions.DELETE_SESSION_FAILURE:
return state;
default:
return state;
}
}