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