Нормализация вложенных ответов в ngrx - PullRequest
0 голосов
/ 05 марта 2019

Я довольно новичок в 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: ''
            };

Я не уверен, являются ли это лучшими практиками или я что-то упустил.Есть ли какой-нибудь из этих хороших способов сделать это?Есть ли лучшие способы?

...