Ошибка: не удается установить для неизменяемой записи. в конфигурации react typescript redux

#reactjs #typescript #redux #react-redux #redux-thunk

#reactjs #машинописный текст #сокращение #реагировать-redux #redux-thunk

Вопрос:

Я пытаюсь установить данные через редуктор на этапе инициализации. я сам получаю сообщение об ошибке, например, не могу установить на неизменяемую запись. я должен погуглить, но все равно не нашел никакого решения, пожалуйста, помогите мне.

Вспомогательная модель:

 import { Record } from 'immutable';

export const Model = <T>(data: T): Record.Class => {

    return Record(data);
};
 

Модель моего класса:

 import { Model } from "./Helpers";
import { ConfirmBox } from './ConfirmBox';
import { Spinner } from "./Spinner";
import { Alert } from "./Alert"

export interface IUtility {
    drawerOpen?: boolean;
    alert?: Alert;
    confirmBox?: ConfirmBox;
    spinner?: Spinner;
    openSignInModel?: boolean;
    openSignUpModel?: boolean;
    openProductDetailPageModel?: boolean;
}

export const UtilityModel = Model<IUtility>({
    drawerOpen: false,
    alert: null,
    confirmBox: null,
    spinner: null,
    openSignInModel: false,
    openSignUpModel: false,
    openProductDetailPageModel: false,
});

export class Utility extends UtilityModel {
    public static DRAWER_OPEN = 'drawerOpen';
    public static ALERT = 'alert';
    public static CONFIRMBOX = 'confirmBox';
    public static SPINNER = 'spinner';
    public static OPENSIGNINMODEL = 'openSignInModel';
    public static OPENSIGNUPMODEL = 'openSignUpModel';
    public static OPENPRODUCTDETAILPAGEMODEL = 'openProductDetailPageModel';

    public drawerOpen: boolean;
    public alert: Alert;
    public confirmBox: ConfirmBox;
    public spinner: Spinner;
    public openSignInModel: boolean;
    public openSignUpModel: boolean;
    public openProductDetailPageModel: boolean;
}
 

Мой редуктор

 import { IAppAction, ActionType } from './../actions/Helpers';
import { Utility } from '../state/Utility';

 const UtilityReducer = (state: Utility = new Utility(), action: IAppAction): Utility => {
    switch (action.type) {
        case ActionType.OPEN_DRAWER:
            return state.set(Utility.DRAWER_OPEN, true) as Utility;
        case ActionType.CLOSE_DRAWER:
            return state.set(Utility.DRAWER_OPEN, false) as Utility;
        case ActionType.OPEN_ALERT:
            return state.set(Utility.ALERT, action.payload) as Utility;
        case ActionType.CLOSE_ALERT:
            return state.set(Utility.ALERT, null) as Utility;
        case ActionType.OPEN_SPINNER:
            return state.set(Utility.SPINNER, action.payload) as Utility;
        case ActionType.CLOSE_SPINNER:
            return state.set(Utility.SPINNER, null) as Utility;
        case ActionType.OPEN_CONFIRM_BOX:
            return state.set(Utility.CONFIRMBOX, action.payload) as Utility;
        case ActionType.CLOSE_CONFIRM_BOX:
            return state.set(Utility.CONFIRMBOX, null) as Utility;
        case ActionType.OPEN_PRODUCT_DETAIL_PAGE_MODEL:
            return state.set(Utility.OPENPRODUCTDETAILPAGEMODEL, true) as Utility;
        case ActionType.CLOSE_PRODUCT_DETAIL_PAGE_MODEL:
            return state.set(Utility.OPENPRODUCTDETAILPAGEMODEL, false) as Utility;
        case ActionType.OPEN_SIGN_IN_MODEL:
            return state.set(Utility.OPENSIGNINMODEL, true) as Utility;
        case ActionType.OPEN_SIGN_UP_MODEL:
            return state.set(Utility.OPENSIGNUPMODEL, true) as Utility;
        case ActionType.CLOSE_SIGN_IN_MODEL:
            return state.set(Utility.OPENSIGNINMODEL, false) as Utility;
        case ActionType.CLOSE_SIGN_UP_MODEL:
            return state.set(Utility.OPENSIGNUPMODEL, false) as Utility;
        default:
            return state;
    }
};

export default UtilityReducer;
 

Приложение не работает из-за этой проблемы, помогите с этим. Большое спасибо

введите описание изображения здесь

Комментарии:

1. Я не знаком с использованием ImmutableJS для redux, но, возможно, что-то в этом руководстве поможет: redux.js.org/recipes/using-immutablejs-with-redux

2. спасибо за ответ, я пройдусь по этому документу.

3. я удалил неизменяемую модель из своего класса утилит