我正在尝试使表单上带有钩子的 redux-saga 正常工作,但我找不到一种方法让它按照我想要的方式工作。 控制台告诉我,我只需要在我的功能主体组件中执行钩子,事实上我这样做了,但它不起作用。
我尝试过的事情:
- 调用组件中的钩子
- 调用 formik 的 onSubmit 回调中的钩子
- 尝试返回回调以避免
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
我的通知钩子和所有逻辑都在那里。我有我的传奇,选择器,然后我使用useDispatch(useSelector等(创建我的钩子。例如,当我提交 formik 表单时,useUpdateNotifications
钩子(用于调度插入我的一个传奇的事件(在src/index.tsx
中调用。但是当我提交表单时,控制台会显示一个警告,告诉我应该在函数组件的主体中调用钩子。这正是我所做的。
你有什么建议吗?
我找到了解决方案,如何以及为什么。以下是解释:
- 我用一个参数调用我的钩子,而不是通过我的调度将其服从于我的回调。当然,根据文档,我们需要先打电话给 de hook,我的错误是对此的误解。我带着这个解决方案现在运行得很好:
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);
希望将来能帮助某人。