Reactjs 调度:调度<;任何行动>;为什么有时你必须精确的行动?

Reactjs 调度:调度<;任何行动>;为什么有时你必须精确的行动?,reactjs,typescript,redux,redux-thunk,Reactjs,Typescript,Redux,Redux Thunk,我遇到了一个问题,可能是因为我在尝试typescript的新功能(键入redux的东西) 这是我的错误消息:类型为“(dispatch:dispatch)的参数 -如上所述,当您使用redux thunk处理异步操作时,该操作到达最内部的函数actionFunction,该函数负责执行该操作。但该调度是我们在中间件中创建的,而不是来自createStore的调度,它具有侦听器并将值传递给减速器 -对reducer的分派是从它的父函数nextFunction开始的 (来源:) 其他有用的链接: 因

我遇到了一个问题,可能是因为我在尝试typescript的新功能(键入redux的东西)

这是我的错误消息:
类型为“(dispatch:dispatch)的参数

-如上所述,当您使用redux thunk处理异步操作时,该操作到达最内部的函数actionFunction,该函数负责执行该操作。但该调度是我们在中间件中创建的,而不是来自createStore的调度,它具有侦听器并将值传递给减速器

-对reducer的分派是从它的父函数nextFunction开始的

(来源:)

其他有用的链接:

因此,如果我真的了解发生了什么,ThunkDispatch可以执行fct、异步fct,也可以不执行,Dispatch是在调用
Actions Creator
到Reducer

如果我听不懂,告诉我,我会改正的


希望它能对您有所帮助!

问题是,您在
mapDispatchToProps
中的第一个参数中使用了类型
Dispatch

由于您使用的是
redux-thunk
,因此需要使用从
redux-thunk
导入的
ThunkDispatch
类型

因此,您的NavBar/container.ts应该是:

import { AnyAction } from "redux";
import { ThunkDispatch } from 'redux-thunk';

// ApplicationState is the shape of your redux store.
// You can use any but its recommended to have a specified shape
// This should ideally be in a different file since it could be needed in many places
interface ApplicationState {
   username: string;
   userId: string;
}

// Use ApplicationDispatch everywhere instead of Dispatch
type ApplicationDispatch = ThunkDispatch<ApplicationState, void, AnyAction> & Dispatch

const mapDispatchToProps = (
  dispatch: ApplicationDispatch
): {
  signOut: () => Promise<String>;
} => ({
  signOut: () => dispatch(signOut()),
});
从“redux”导入{AnyAction};
从“redux thunk”导入{ThunkDispatch};
//ApplicationState是redux存储的形状。
//可以使用除推荐形状以外的任何形状来指定形状
//理想情况下,这应该在不同的文件中,因为在许多地方可能需要它
接口应用程序状态{
用户名:字符串;
userId:string;
}
//在任何地方使用ApplicationDispatch而不是Dispatch
类型ApplicationDispatch=ThunkDispatch&Dispatch
const mapDispatchToProps=(
调度:应用调度
): {
签出:()=>承诺;
} => ({
注销:()=>分派(注销()),
});

ok,但这是因为我在函数中使用了dispatch?当我替换我得到的所有内容时,
泛型类型“ThunkDispatch”需要3个类型参数.TS2314
我该怎么办?我不太明白您是否有一些文档或者您可以向我解释一下吗?只是为了测试,我做了
dispatch:thunkspatch
但得到了以下结果:
Type'(dispatch:dispatch)=>void'缺少类型“Promise”中的以下属性:然后,catch,[Symbol.toStringTag],终于TS2739了。
好的,我找到了解决方案。但是我觉得我真的不明白它…我编辑了你的帖子,但我不明白什么是
应用程序状态是你状态的形状。
存储
形状吗?是的,就是它。redux存储的形状。例如:你的redux状态y包含如下内容:
接口应用程序状态{username:string,password:string}
。您可以在那里使用应用程序状态接口
/Action/userAction.js
___________________________________________________
export const sessionInitial = (
  session_id: number
): sessionInitialActionOption => ({
  type: SESSION,
  payload: session_id
});

/Dashboard/container.js
_______________________________________________
const mapDispatchToProps = (
  dispatch: Dispatch
): {
  sessionInitial: (
    session_id: number
  ) => {
    type: string;
    payload: number;
  };
} => ({
  sessionInitial: (session_id: number) => dispatch(sessionInitial(session_id))
});
const mapDispatchToProps = (
  dispatch: ThunkDispatch<
    void,
    void,
    | UserActionsType            //one of my actionsType
    | sessionActionsType         //one of my actionsType
    | isConnectActionsType       //one of my actionsType
    | initialUserActionsType     //one of my actionsType
  >
): {
  signOut: () => void;
} => ({
  signOut: () => dispatch(signOut())
});
type ApplicationDispatch = ThunkDispatch<IStoreState, void, AnyAction> & Dispatch

const mapDispatchToProps = (
  dispatch: ApplicationDispatch
): {
  signOut: () => void;
} => ({
  signOut: () => dispatch(signOut())
});

export default compose<any>(
  withRouter,
  connect(mapStateToProps, mapDispatchToProps)
);

import { AnyAction } from "redux";
import { ThunkDispatch } from 'redux-thunk';

// ApplicationState is the shape of your redux store.
// You can use any but its recommended to have a specified shape
// This should ideally be in a different file since it could be needed in many places
interface ApplicationState {
   username: string;
   userId: string;
}

// Use ApplicationDispatch everywhere instead of Dispatch
type ApplicationDispatch = ThunkDispatch<ApplicationState, void, AnyAction> & Dispatch

const mapDispatchToProps = (
  dispatch: ApplicationDispatch
): {
  signOut: () => Promise<String>;
} => ({
  signOut: () => dispatch(signOut()),
});