开发者问题收集

无法读取未定义的属性(读取“类型”)。Redux

2022-05-21
2891

因此,我正在尝试在我的项目中设置 redux。并且在 Reducer 中出现了一个非常奇怪的问题:未捕获的 TypeError:无法读取未定义的属性(读取“type”)。 这是 Reducer.ts:

import { MarkerActionEnum, MarkerActions, MarkerState } from './types';

const initialState: MarkerState = {
  data: undefined,
};

export function MarkerReducer(
  action: MarkerActions,
  state = initialState,
): MarkerState {
  switch (action.type) {
    case MarkerActionEnum.ADD_MARKER:
      return {
        ...state,
        data: action.payload,
      };
    case MarkerActionEnum.DELETE_MARKER: {
      return { data: undefined };
    }
    default:
      return state;
  }
}

export default MarkerReducer;

以及 Reducer 的 types.ts:

import { Action } from 'redux';
import { MarkerType } from '../../pages/mapPage/components/CustomMap';

export interface MarkerState {
  data: MarkerType | undefined;
}

export enum MarkerActionEnum {
  ADD_MARKER = 'marker/ADD_MARKER',
  DELETE_MARKER = 'marker/DELETE_MARKER',
}

export interface AddMarkerInterface
  extends Action<MarkerActionEnum.ADD_MARKER> {
  type: MarkerActionEnum.ADD_MARKER;
  payload: { longitude: number; latitude: number };
}

export interface DeleteMarkerInterface
  extends Action<MarkerActionEnum.DELETE_MARKER> {
  type: MarkerActionEnum.DELETE_MARKER;
}

export type MarkerActions = AddMarkerInterface | DeleteMarkerInterface;

日志表明问题发生在 Reducer 的第 11 行,就在 switch (action.type) 中 有人知道或遇到过类似的事情吗?

2个回答

我遇到了同样的问题。问题在于参数的顺序。“State”应该是第一个,“action”应该是第二个。

abender
2022-08-18

我认为这意味着您已将非操作(即没有 type 属性)用作 dispatch 的参数。例如,如果您有一个操作构建器但忘记了括号,例如 dispatch(myActionBuilder) 而不是 dispatch(myActionBuilder())

JulienD
2022-05-21