Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 是否接收所有动作类型?_Javascript_Reactjs_Typescript_Redux - Fatal编程技术网

Javascript 是否接收所有动作类型?

Javascript 是否接收所有动作类型?,javascript,reactjs,typescript,redux,Javascript,Reactjs,Typescript,Redux,我正在编写我的第一个Redux应用程序。我正在基于的quickstarter应用程序中创建一个新页面。我的问题是样板应用程序的actionType只有type属性,而我的操作也需要负载。当Redux应用程序初始化或更改路由时,将触发操作@@router/LOCATION\u CHANGE,该操作的有效负载由它要更改的位置组成。这将被解释为一个带有我的负载类型的操作,而它显然不是。当应用程序试图读取路由器负载的filename属性时崩溃,该属性不存在,但存在于我的类型中 我的类型如下: expor

我正在编写我的第一个Redux应用程序。我正在基于的quickstarter应用程序中创建一个新页面。我的问题是样板应用程序的
actionType
只有
type
属性,而我的操作也需要
负载。当Redux应用程序初始化或更改路由时,将触发操作
@@router/LOCATION\u CHANGE
,该操作的有效负载由它要更改的位置组成。这将被解释为一个带有我的负载类型的操作,而它显然不是。当应用程序试图读取路由器负载的
filename
属性时崩溃,该属性不存在,但存在于我的类型中

我的类型如下:

export type photoType = {
  filename: string,
  selected?: boolean
};

type actionType = {
  type: string,
  payload?: photoType
};
export default function photoContainer(state: Array<photoType> = [], action: actionType) {
  const idx = state.indexOf(action.payload);
  switch (action.type) {
    case ADD_PHOTO:
      return [action.payload, ...state];
    case REMOVE_PHOTO:
      if (idx > -1) {
        return [
          ...state.slice(0, idx),
          ...state.slice(idx + 1)
        ];
      }
      return state;
    default:
      return state;
  }
}
我的减速机是这样的:

export type photoType = {
  filename: string,
  selected?: boolean
};

type actionType = {
  type: string,
  payload?: photoType
};
export default function photoContainer(state: Array<photoType> = [], action: actionType) {
  const idx = state.indexOf(action.payload);
  switch (action.type) {
    case ADD_PHOTO:
      return [action.payload, ...state];
    case REMOVE_PHOTO:
      if (idx > -1) {
        return [
          ...state.slice(0, idx),
          ...state.slice(idx + 1)
        ];
      }
      return state;
    default:
      return state;
  }
}
导出默认函数photoContainer(状态:数组=[],操作:actionType){
const idx=state.indexOf(action.payload);
开关(动作类型){
案件补充照片:
返回[action.payload,…state];
案件移开(照片):
如果(idx>-1){
返回[
…state.slice(0,idx),
…state.slice(idx+1)
];
}
返回状态;
违约:
返回状态;
}
}

我以为Typescript应该能够区分我的动作和其他动作的形状?如何构造reducer,使其不会被Redux的本机操作破坏?

您使用的是自定义中间件还是其他什么?我不太清楚你的方法到底发生了什么。我们能看看你实际在哪里调度操作的代码吗?另外,使用
union
类型定义您的操作可能会很有帮助,该类型可能类似于
type PhotoAction={type:'ADD_PHOTO',PHOTO:PhotoType}{type:'REMOVE_PHOTO'}}{