Редукс-сага с не работающими хуками, неверный вызов хуков - PullRequest
0 голосов
/ 08 января 2020

Я пытаюсь заставить работать редук-сагу с крючками на форме, но я не могу найти способ заставить ее работать так, как я хочу. консоль говорит мне, что мне нужно выполнить ловушку только в моем компоненте bodynal, что я и делаю, но оно не работает.

То, что я пытался:

  • Вызов ловушку в component
  • Вызывает ловушку внутри обратного вызова onSubmit formik
  • Пытался вернуть обратный вызов, чтобы избежать мгновенного вызова моего пользовательского ловушки в 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

Мои хуки для уведомлений и все логи c есть. У меня есть саги, селекторы, а затем я создаю свои хуки с помощью useDispatch (useSelector et c). Крюки useUpdateNotifications (используемые для отправки события, подключенного к одной из моих саг), например, вызываются в src/index.tsx, когда я отправляю форму formik. Но когда я отправляю свою форму, консоль выдает предупреждение о том, что хуки должны вызываться внутри тела компонента функции. Это именно то, что я сделал.

У вас есть какие-нибудь советы?

1 Ответ

0 голосов
/ 09 января 2020

И я нахожу решение, как и почему. Вот объяснения:

  • Я вызывал свой хук с аргументом вместо того, чтобы откладывать его до моего обратного вызова внутри с моей отправкой. Конечно, согласно do c, сначала нам нужно вызвать 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);

Надеюсь, это поможет кому-то в будущем.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...