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))
  )
);

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...