ngrx实体的update一是不改变状态。

问题描述 投票:0回答:1

我的动作设置是这样的

    export const bankAccountUpdating = createAction(
  '[Create New Account Component] Account Updating',
  props<{ update: Update<BankAccount> }>()
);

export const bankAccountUpdated = createAction(
  '[Bank Manager Effect] Account Updated',
  props<{ update: Update<BankAccount> }>()
);

export const updateAccountError = createAction(
  '[Bank Manager Effect] Update Accounts Error'
);

减压器的设置是这样的

 export const initialBankAccountsState = adapter.getInitialState({
  allBankAccountsLoaded: false,
});

export const bankManagerReducer = createReducer(
  initialBankAccountsState,

  on(BankManagerActions.bankAccountUpdated, (state, action) =>
    adapter.updateOne(action.update, state)
  ),

我有一个在 "更新 "时触发的效果,一旦服务器返回响应,我就发送 "更新"。

 updateAccount$ = createEffect(() =>
  this.actions$.pipe(
    ofType(BankManagerActions.bankAccountUpdating),
    concatMap((action) =>
      this.bankManagerHttpService
        .updateAccount(action.update.id, action.update.changes)
        .pipe(
          map(account => BankManagerActions.bankAccountUpdated(
            {update: {id: account.id, changes: account}})), // action here
          catchError((err) => {
            console.log(err);

            return of(BankManagerActions.updateAccountError());
          })
        )
    ),
));

注意到在 "update "上,我正在做 "adaptor.updateOne",但store并没有显示出任何区别。注意到在 "update "上,我没有reducer逻辑,因为我没有改变状态。"update "只是让后端调用的效果。当我从后端回来时,我调用 "update",它调用 "updateOne",但它没有改变状态。

当我加载有网格的页面,所有的账户都被加载,我看到不同的地方出现了,数组中的一个对象被更新了。enter image description here

更新

服务代码是这样的

    updateAccount(id: string | number, account: Partial<BankAccount>): Observable<BankAccount> {
    const headers = new HttpHeaders();
    headers.append('Content-Type' , 'application/json');
    return this.http.put<BankAccount>('https://localhost:44391/BankAccount/' + id, account);
  }
angular rxjs ngrx ngrx-effects ngrx-entity
1个回答
0
投票

如果 bankManagerHttpService.updateAccount 不返回一个 Observable<Account>试试吧: BankManagerActions.bankAccountUpdated({update: action.update}).

© www.soinside.com 2019 - 2024. All rights reserved.