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 }
})
简单的答案是使用对象而不是函数,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
,而是使用钩子替代useSelector
和useDispatch
。你可以在这里找到更多信息。