Я довольно новичок в ngrx, и я не уверен, что лучшие практики в отношении нормализации вложенных объектов.
Допустим, хранилище определяется следующим образом:
export interface User {
id: string;
name: string;
surname: string;
}
export interface Transaction {
id: string;
amount: number;
owners: []
}
export interface TransactionState {
ids: string[];
entities: { [id: string]: Transaction }
}
export interface UserState {
ids: string[],
entities: { [id: string]: User }
}
export interface CapitalState {
transactions: TransactionState;
users: UserState;
}
ПервыйТо, как я думал о реализации этого, заключается в том, что когда данные нормализуются, а затем отправляются два действия для обновления пользователей и транзакций
@Effect()
transactions$ = this.actions$.pipe(
ofType(fromTransactionsActions.TransactionsActionTypes.LoadTransactions),
concatMap((action: fromTransactionsActions.LoadTransactions) =>
this.transactionsService.loadTransactions(action.payload).pipe(
map((tranactions: TransactionView) => {
//Normalize Data
return [ //Dispatch Transactions Load Success
//Dispatch Users Load Success];
}),
catchError(error => of(new fromTransactionsActions.TransactionsLoadFailure("")))
))
)
Вторым является отправка нормализованных данных в одной транзакции.Загрузите действие «Успешно», а затем обновите состояние.
export function reducer(state = initialState, action: TransactionsActions): CapitalState {
switch (action.type) {
case TransactionsActionTypes.AllotShareCapitalSuccess:
return {
...state,
transactions: { ...state.transactions, ...action.payload.entities.transactions },
users: { ...state.users, ...action.payload.entities.users },
error: ''
};
Я не уверен, являются ли это лучшими практиками или я что-то упустил.Есть ли какой-нибудь из этих хороших способов сделать это?Есть ли лучшие способы?