ngrx 实体的 updateOne 没有改变状态
updateOne of ngrx entity is not changing the state
我的动作设置是这样的
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)
),
我有一个在 "Updating" 上触发的效果,一旦返回服务器的响应,我就会调度 "updated"
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());
})
)
),
));
请注意,在 "Updated" 我正在做 "adapter.updateOne" 但商店没有显示任何差异。
请注意,在 "updating" 上我没有减速器逻辑,因为我没有改变状态。 "updating" 只会造成后端调用的效果。当我从后端回来时,我调用 "updated" 调用 "updateOne" 但它没有改变状态。
当我加载具有网格的页面并且所有帐户都已加载时,我发现出现了差异。数组中的对象之一已更新。
我一打电话就应该显示不同 "updateOne"
更新
服务代码如下所示
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);
}
如果 bankManagerHttpService.updateAccount
不是 return 和 Observable<Account>
,请尝试:BankManagerActions.bankAccountUpdated({update: action.update})
。
我的动作设置是这样的
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)
),
我有一个在 "Updating" 上触发的效果,一旦返回服务器的响应,我就会调度 "updated"
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());
})
)
),
));
请注意,在 "Updated" 我正在做 "adapter.updateOne" 但商店没有显示任何差异。 请注意,在 "updating" 上我没有减速器逻辑,因为我没有改变状态。 "updating" 只会造成后端调用的效果。当我从后端回来时,我调用 "updated" 调用 "updateOne" 但它没有改变状态。
当我加载具有网格的页面并且所有帐户都已加载时,我发现出现了差异。数组中的对象之一已更新。
我一打电话就应该显示不同 "updateOne"
更新
服务代码如下所示
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);
}
如果 bankManagerHttpService.updateAccount
不是 return 和 Observable<Account>
,请尝试:BankManagerActions.bankAccountUpdated({update: action.update})
。