带有保存GET响应的角度,ngrx问题,带有嵌套数组,要存储

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

效果:

getUserStatus$ = createEffect(() => this.actions$.pipe(
    ofType(getUserStatus),
    switchMap(_ => this.userApiService.getUserStatus().pipe(
        map(userStatusApiResponse = > getUserStatusSuccess({
            userStatusApiResponse
        })),
        catchError(error = > of(getUserStatusFailed({
            error
        })))))
));

服务:

public getUserStatus(): Observable<UserStatusApiResponse> {
    return this.httpClient.get<CommonResponse<UserStatusApiResponse>> (`$ {
        USER_STATUS_API
    }`).pipe(
        map(UserApiService.extractUserStatusApiResponse),
        catchError(commonApiError)
    );
}

提取GET响应的功能:

private static extractUserStatusApiResponse(response: CommonResponse<UserStatusApiResponse>): UserStatusApiResponse {
    return response.data;
}

获取回复

{
    "httpStatus": 200,
    "data": {
        "necessaryField1: "f1",
        "necessaryField2: "f2",
        "unecessaryField3: "f3",
        "unecessaryField4: "f4",
        "arrayUsers": [
            {
                "A": {
                    "a1": "aaa",
                    "a2": "bbb",
                    "a3": 0
                },
                "B": {
                    "b1": "aaa",
                    "b2": "bbb",
                    "b3": 0
                },
                "C": {
                    "c1": "aaa",
                    "c2": "bbb",
                    "c3": 0
                }
            }
        ]
    }
}

我需要从上面对象下面的响应模型:

export interface UserStatusApiResponse {
    "necessaryField1: string;
    "necessaryField2: string;
    "arrayUsers": ArrayUsers[]
}

arrayUsers中,我只需要对象AB

export interface ArrayUsers {
    a: A;
    b: B;
}

减速器:

on(getUserStatusSuccess, (state, action) = > ({
        ...state,
    error: null,
    necessaryArray: {
        necessaryField1: action.userStatusApiResponse.necessaryField1,
        necessaryField2: action.userStatusApiResponse.necessaryField2,
    },
    arrayUsers: action.userStatusApiResponse.arrayUsers
})),

我的问题:

[总是在商店中,无论UserStatusApiResponse,我都有所有网络响应。不在UserStatusApiResponse中的另一个字段会自动扩展存储。

如何正确处理上述问题?我想控制每个对象/数组的类型,但总是在商店中看到所有对象。同样使用unecessaryField3f3unecessaryField4f4和对象C ...

angular ngrx ngrx-store
1个回答
0
投票

请记住,键入仅用于编译。它是用JS编译的,然后您没有任何类型。

因此,如果您只需要特定的字段,则需要映射响应到仅具有所需键的新对象。

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