我似乎陷入了困境,因为没有很多关于如何在ngrx上使用firestore的指南或教程。
假设我们有组织列表,所有这些组织将用于2个组件,componantA和componentB。
现在每次更改时,都会调用LOAD_ACTION_SUCCESS,将数据保存到每个商店状态。
但是这需要组件调度LOAD_ACTION开始,这对于REAL_TIME_DATA来说可能看起来有些错误,因为它会在之后继续更新。即使没有使用。
不再使用2份国家数据。
这导致我:
任何有助于我获得进一步发展的信息或指导都会受到赞赏,我似乎陷入了这样一个微不足道的问题,显然我可以继续编码,但我希望它能正确。
在谈到ngrx时,处理实时数据似乎让我感到困惑。
示例也将受到赞赏。
答案 0 :(得分:2)
我刚刚写了一篇关于该问题的blog,我想比较一下连接Firestore和NGRX的不同方法。
基本上,您可以将valueChanges()操作映射到商店操作,并且商店将同步。我使用了效果,但也可以在服务中使用。
@Effect()
getData$ = this.dataDb.getFakeDataStateChanges().pipe(
mergeMap(actions => actions),
map(action => {
return {
type: `[FirstData] ${action.type}`,
payload: { id: action.payload.doc.id, ...action.payload.doc.data() }
};
})
);
行动就像
export enum FirstActionTypes {
FIRST_DATA_ADDED = '[FirstData] added',
FIRST_DATA_MODIFIED = '[FirstData] modified',
FIRST_DATA_REMOVED = '[FirstData] removed'
}
和reducer处理数据
export function firstReducer(state: State = initialState, action: FirstAction) {
switch (action.type) {
case FirstActionTypes.FIRST_DATA_ADDED:
return firstAdapter.addOne(action.payload, state);
case FirstActionTypes.FIRST_DATA_MODIFIED:
return firstAdapter.updateOne(
{
id: action.payload.id,
changes: action.payload
},
state
);
case FirstActionTypes.FIRST_DATA_REMOVED:
return firstAdapter.removeOne(action.payload.id, state);
default: {
return state;
}
}
}