我正在尝试使带有钩子的redux-saga正常工作,但是我找不到找到使之按我想要的方式工作的方法。控制台告诉我,我只需要在我的功能主体组件中执行钩子,实际上我确实这样做了,但是它不起作用。
我尝试过的事情:
core/notifications/index.ts
这是钩子:
function useUpdateNotifications(subscriptions: FormatedSubscription) {
const dispatch = useDispatch();
const formatSubscriptions = valuesIn(subscriptions);
return () =>
dispatch(Events.updateNotifications(formatSubscriptions as Subscription[]));
}
和我称之为的地方:
const formik = useFormik({
initialValues: formatedValues,
onSubmit: (values: FormatedSubscription) => {
Core.updateNotifications(values);
}
});
您可以在https://codesandbox.io/s/hook-formik-sagas-issues-3pq62
处找到具有相同问题的沙盒 core/notifications/index.tsx
我的通知钩子和所有逻辑都在那里。我有我的sagas,选择器,然后使用useDispatch(useSelector等)创建钩子。例如,当我提交Formik表单时,在 useUpdateNotifications
中调用了钩子src/index.tsx
(用于分发插入到我的sagas之一的事件)。但是,当我提交表单时,控制台会显示警告,告诉我应该在函数组件的主体内调用钩子。正是我所做的。
您有什么建议吗?
答案 0 :(得分:0)
我找到了解决方案,方法和原因。以下是说明:
function useUpdateNotifications() {
const dispatch = useDispatch();
return (items: FormatedSubscription) => {
const formatSubscriptions = valuesIn(items);
dispatch(Events.updateNotifications(formatSubscriptions as Subscription[]));
};
}
我可以用它简单地调用它而不会出现打字稿错误,问我“期望1个参数却有0个”:
const updateNotifications = Core.updateNotifications();
updateNotifications(notifications);
希望它将对以后的人有所帮助。