当从 JS 重写为 TS 时,Redux mapDispatchToProps 抛出 TS 错误(预期 1 个参数,但得到 2 个。)
Redux mapDispatchToProps throws TS error when rewritten from JS toTS (Expected 1 arguments, but got 2.)
我对 TS 的经验相当有限。当重写完美工作的 js 代码时
const mapDispatchToProps = (dispatch) => ({
thunkFetchIndividualBook: (redirect, id) => dispatch(thunkFetchIndividualBook(redirect, id)),
});
其中thunkFetchIndividualBooks如下:
interface thunkFetchIndividualBookArgsType {
redirect: RedirectType;
id: string;
}
const thunkFetchIndividualBook = ({
redirect,
id,
}: thunkFetchIndividualBookArgsType): ThunkAction<void, RootStateType, unknown, AnyAction> => {
return async dispatch => {
const path = googleAPI + id;
dispatch(fetchDetails(path));
redirect.individualBook!();
};
};
export default thunkFetchIndividualBook;
它告诉我们 需要 1 个参数,但得到了 2 个。
这里有什么问题?
useDispatchAction 是这样的:
const useDispatchAction = () => {
const dispatch = useDispatch();
return bindActionCreators(actionCreators, dispatch);
};
应该是thunkFetchIndividualBook({redirect, id})
,不是thunkFetchIndividualBook(redirect, id)
。
也就是说,connect
是一个遗留问题 api,您现在不应该使用 connect
/mapStateToProps
/mapDispatchToProps
,除非您正在使用遗留 class 个组件。
如果您使用函数组件,请考虑使用 useSelector
和 useDispatch
挂钩。
一般来说,如果您只是在学习 Redux,并且您的课程正在展示 switch..case reducer、ACTION_TYPES 或不可变的 reducer 逻辑,那么它们不再是现代 Redux 的一部分。在这种情况下,我强烈建议您通读 the official Redux tutorial。 Modern Redux 只是代码的 1/4,具体来说与 TypeScript 一起使用要容易得多。
我对 TS 的经验相当有限。当重写完美工作的 js 代码时
const mapDispatchToProps = (dispatch) => ({
thunkFetchIndividualBook: (redirect, id) => dispatch(thunkFetchIndividualBook(redirect, id)),
});
其中thunkFetchIndividualBooks如下:
interface thunkFetchIndividualBookArgsType {
redirect: RedirectType;
id: string;
}
const thunkFetchIndividualBook = ({
redirect,
id,
}: thunkFetchIndividualBookArgsType): ThunkAction<void, RootStateType, unknown, AnyAction> => {
return async dispatch => {
const path = googleAPI + id;
dispatch(fetchDetails(path));
redirect.individualBook!();
};
};
export default thunkFetchIndividualBook;
它告诉我们 需要 1 个参数,但得到了 2 个。 这里有什么问题?
useDispatchAction 是这样的:
const useDispatchAction = () => {
const dispatch = useDispatch();
return bindActionCreators(actionCreators, dispatch);
};
应该是thunkFetchIndividualBook({redirect, id})
,不是thunkFetchIndividualBook(redirect, id)
。
也就是说,connect
是一个遗留问题 api,您现在不应该使用 connect
/mapStateToProps
/mapDispatchToProps
,除非您正在使用遗留 class 个组件。
如果您使用函数组件,请考虑使用 useSelector
和 useDispatch
挂钩。
一般来说,如果您只是在学习 Redux,并且您的课程正在展示 switch..case reducer、ACTION_TYPES 或不可变的 reducer 逻辑,那么它们不再是现代 Redux 的一部分。在这种情况下,我强烈建议您通读 the official Redux tutorial。 Modern Redux 只是代码的 1/4,具体来说与 TypeScript 一起使用要容易得多。