【发布时间】:2018-10-21 23:39:19
【问题描述】:
我正在使用带有 typescript 的 redux 和 redux-thunk。我正在尝试使用 mapDispatchToProps 通过 connect() 向组件注入一个简单的 thunk 动作创建器。
操作
export enum TestActionTypes {
THUNK_ACTION = "THUNK_ACTION"
}
export interface ThunkAction {
type: TestActionTypes.THUNK_ACTION;
}
export type TestAction = ThunkAction;
动作创作者
export function thunkActionCreator() {
return function(dispatch: Dispatch<any>) {
dispatch({ type: TestAction.THUNK_ACTION });
};
连接组件
interface DemoScreenState {}
interface OwnProps {}
interface StateProps {}
interface DispatchProps {
testThunk: () => void;
}
type DemoScreenProps = StateProps & DispatchProps & OwnProps;
class DemoScreen extends React.Component<
DemoScreenProps,
DemoScreenState
> {
constructor(props: DemoScreenProps) {
super(props);
}
componentDidMount() {
this.props.testThunk();
}
render() {
return null;
}
}
function mapStateToProps(state: any): StateProps {
return {};
}
function mapDispatchToProps(dispatch: Dispatch<any>): DispatchProps {
return {
testThunk: () => dispatch(thunkActionCreator())
};
}
export default connect<StateProps, DispatchProps, OwnProps>(
mapStateToProps,
mapDispatchToProps
)(DemoScreen);
商店
import { createStore, applyMiddleware } from "redux";
import rootReducer from "./RootReducer";
import thunk from "redux-thunk";
const store = createStore(rootReducer, applyMiddleware(thunk));
export default store;
但是,我在使用 connect() 时遇到了两个问题。首先,我在 mapDispatchToProps 中声明 testThunk 时出现类型错误。
'(dispatch: Dispatch) => void' 类型的参数不能分配给'Action' 类型的参数。类型 '(dispatch: Dispatch) => void' 中缺少属性 'type'。 我不知道如何处理这个问题,因为根据定义,thunk 与普通操作不同。
* EDIT 24/10/2018 * 参见下面的答案,使用:
"@types/react-redux": "^6.0.9",
"react": "16.3.1",
"react-native": "~0.55.2",
"react-redux": "^5.0.7",
"redux": "^4.0.1",
"redux-thunk": "^2.3.0"
【问题讨论】:
-
我们可以看看你在哪里配置 thunk 中间件吗?
-
我已经更新了这个问题。我没有配置 thunk 中间件,我只是从“redux-thunk”中导入它,并使用“redux”中的 applyMiddleware 以 thunk 作为参数初始化存储。
-
这可能有帮助吗? github.com/reduxjs/redux-thunk/issues/…(“dupski 于 2017 年 5 月 2 日发表评论”——当天第一个来自 dupski 的评论)
标签: typescript redux react-redux redux-thunk