ngrx adpter update1

问题描述

我对ngrx适配器有疑问, 如何根据动作的参数更新减速器?

我试图从rxjs中创建一个find方法,但是出现“重叠”错误

主界面和状态界面都共享一个关键参数,但不是id。

这是一段代码

动作:

export const verifyDocument = createAction('[Document/API] Verify Document',props<{ status: Status }>());

减速器:

const _documentReducer = createReducer(
    initialState,on(DocumentActions.upsertDocuments,(state,{ documents }) => {
        return adapter.upsertMany(documents,state);
      }),on(DocumentActions.verifyDocument,{ status }) => {

        const records = {...state.entities}


        console.log("reducer: ",records,status,"end.");
        return state;
        //return adapter.updateOne(???,state);

解决方法

您可能想尝试通过以下方法实现它:

首先创建一个selector,以便您可以通过所需的属性获取对象:

export const getPersonByName = createSelector(getPeopleEntities,(people: Person[],name: string) => people.find(x = x.name == name));

利用Effect来监听UpdateByNameAction并依次派发UpdatePesonByIdAction将允许您预期的行为:

public findByName$ = createEffect(() => this.actions$
 .pipe(
    ofType(SchemaActionTypes.FindByName),switchMap(name => this.store.pipe(select(getPersonByName,name))),map((person) => authAction.updatePesonByIdAction(person,person.id))
  )
);