javascript - Ngrx : Cannot assign to read only property 'Property' of object '[Object]'

标签 javascript angular typescript javascript-objects ngrx

我正在使用ngrx商店。

在我的状态下,我必须元素

export interface ISchedulesState {
  schedulings: ISchedules;
  actualTrips: ISchedule[];
}

这是我的界面
export interface ISchedules {
  [key: string]: ISchedule[];
}

export interface ISchedule {
  dest: number;
  data: string
}

在 reducer 中,我更新了 actualTrips
export const SchedulingReducers = (
  state = initialSchedulingState,
  action: SchedulesAction
): ISchedulesState => {
  switch (action.type) {
    case ESchedulesActions.GetSchedulesByDate: {
      return {
        ...state
      };
    }
    case ESchedulesActions.GetSchedulesByDateSuccess: {
      return {
        ...state,
        schedulings: action.payload
      };
    }
    case ESchedulesActions.GetSchedulesByTime: {
      let time = action.payload;
      state.actualTrips = [...(state.schedulings[time] || [])]; // if not data return empty array
      return state;
    }
    default:
      return state;
  }
};

但实际上我得到一个错误

ERROR TypeError: Cannot assign to read only property 'actualTrips' of object '[object Object]'

最佳答案

Redux 模式的基本原则是状态及其部分的不变性,因为它让我们只通过对象引用来检测变化,而不是比较整个对象。

在您的 reducer 中,您不能直接分配状态属性( state.actualTrips = ),因为更改检测器(和选择器)不会将其检测为已更改。

要修改状态,请返回带有新修改的状态副本。

  const time = action.payload;
  return {
      ...state,
      actualTrips: [...(state.schedulings[time] || [])]
  }

关于javascript - Ngrx : Cannot assign to read only property 'Property' of object '[Object]' ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57591012/

相关文章:

javascript - 粘性/固定滚动直到父容器结束 - CSS/JS

javascript - d3.js:垂直移动线与折线图的交点

angular - NgModule 的提供程序无效。只允许 Provider 和 Type 的实例,得到 : [? [object Object]?, ...]

angularjs - angular_1.default.module 未捕获类型错误 : Cannot read property 'module' of undefined

asp.net - jQuery 和 ASP.NET - 强制单击按钮

javascript - 在 JavaScript 中获取 CSS 类名

typescript - 为什么 Typescript 映射元组类型在提供通用类型与直接类型时表现不同?

typescript - VSCode 调试器和 typescript : Step Over/Into goes to JS file

javascript - 在 Angular 中预览多个图像和视频

python - 由于 CORS 问题,Angular 应用程序无法读取 Django Rest Framework API