【发布时间】:2020-08-25 10:10:23
【问题描述】:
嗨,最近我遇到了 useDispatch 钩子,它应该给我一个 mapDispatchToProps 的替代方案,我发现在每个 onPress 中重复 () => dispatch(action(args)) 所以我开始考虑一些通用的东西。我的目标是制作一个使用 useDispatch() 的钩子,并包装它获取的函数并返回 () => dispatch(theWrappedAction(theActionArgs))
例如,如果我有一个动作 upCounterActionCreator 如下:
export const upCounterActionCreator = (count: number = 1): AppActions => {
const action: UpCounterAction = {
type: 'UP_COUNTER',
count
};
return action;
};
我的目标是做这样的事情:const [upAfterDispatch] = useActions(upCounterActionCreator);
然后我可以这样做:
<Button onPress={upAfterDispatch(1)} title='+' />
我尝试做的如下:
export const useActions = (...actions: ((...args: any) => AppActions)[]) => {
const dispatch = useDispatch<Dispatch<AppActions>>();
const actionsWithDispach: ((...args: any) => () => (...args: any) => AppActions)[] = [];
actions.forEach(action => {
actionsWithDispach.push((...args: any) => () => (...args: any) => dispatch(action(...args)));
});
return actionsWithDispach;
};
要将包装好的函数放在 onPress 上,我需要这样做
<Button onPress={upAfterDispatch(1)()} title='+' /> - 调用它,这不是很好的选择。
然后,当我确实调用它时,确实正在调度该动作,但是当我在我的有效负载上进行调试时,我有一个计数对象,如下所示:
这是一个类-
我做错了什么?我需要做什么才能:
获取数字 1(动作负载中发送的计数参数)而不是类
从 useActions 调用返回的函数,而不是像这样调用它
onPress={upAfterDispatch(1)()
** 我认为 args 中收到的对象是 react native onPress 事件,如何避免它覆盖我的 count 参数? 先谢谢了!
【问题讨论】:
标签: reactjs typescript react-native react-redux react-hooks