功能的Redux调度类型

时间:2020-08-31 00:09:38

标签: reactjs typescript react-redux

redux函数的调度类型是什么?哪个不包含类型属性?

例如,在这里我正在做any,但是这里的实际类型是什么?

const mapDispatchToProps = (dispatch:any) => ({
  updateProject: (project: ProjectBody) => dispatch(updateProject(project))
})

我的更新项目看起来像这样

export function update(project: ProjectBody) {
  return async (dispatch: Dispatch<UpdateStateAction>) => {
    try {
      const res = await fetch(`${project.id}`, {
      // sme code
    dispatch({
      type: SUCCESS_UPDATE_PROJECT,
      payload: { project: json.project }
    })

1 个答案:

答案 0 :(得分:0)

简短的答案是使用对象而不是函数,并且dispatch绑定了您:

const mapDispatch = {
  updateProject
}

中等答案是Dispatch是泛型类型,因此您可以将操作创建者生成的对象形状作为参数传递。如果您有多个动作创建者,则要映射到props,请使用以下语法:Dispatch<IActionCreatorIncCount | IActionCreatorDecCount>

import {Dispatch} from 'react-redux'

const INC_COUNT = 'INC_COUNT'

interface IActionCreatorIncCount {
  payload: number
  type: typeof INC_COUNT
}

const actionCreatorIncCount = (n: number): IActionCreatorIncCount =>
  ({ payload: n, type: INC_COUNT })

const mapDispatchToProps = (dispatch: Dispatch<IActionCreatorIncCount>) => ({
incCount: actionCreatorIncCount
})

长答案是不再使用mapDispatchToProps,而使用钩子替代品useSelectoruseDispatch。您可以找到更多信息here