ngrx更新对象数组-状态上不存在映射

时间:2020-02-01 19:59:31

标签: angular ngrx

尝试通过ngrx-reducer更新对象数组,我在网络上找到了一些示例(例如https://blog.strongbrew.io/Redux-best-practices/

其中一些尝试执行state.map,但出现错误“类型'state'不存在属性'map'”。

在一个对象数组中,我想更新一个对象的属性languageStrg。这是我的代码:

export function langsReducer(state = initialState, action: LangsActions): State {
    switch (action.type) {
        case ActionTypes.SETLANG: {
            return state.map(obj =>
                obj.languagePurpose === action.payload.languagePurpose ?
                {...state, languageStrg: action.payload.languageStrg} :
                obj);
            }
}

我该如何重写代码以使更新生效?

2 个答案:

答案 0 :(得分:2)

您的情况将是

export function langsReducer(state = initialState, action: LangsActions): State {
    switch (action.type) {
        case ActionTypes.SETLANG: {
            return {
                ...state,
                languages: state.languages.map(obj =>
                    obj.languagePurpose === action.payload.languagePurpose
                        ? {...obj, languageStrg: action.payload.languageStrg}
                        : obj
                    )
            };
        }
        default:
            return state;
    }
}

答案 1 :(得分:0)

您的化简器应在开关箱的默认情况下返回状态。

如果要使用对象的对象,则初始状态应如下所示

const initialState = {
    arr = []
}