首页 > 解决方案 > 如何在useEffect react中使用handleSubmit formik

问题描述

所以我有这样的 useEffect 。目标是对每个值应用过滤器。

  useEffect(() => {
    if (notifData) { //notifData is array of object
      const listNotif = [];
      notifData.forEach((notifItem) => {
        if (notifItem.queryString) {
          listNotif.push(JSON.parse(notifItem.queryString));
        }
      });
      const queryParams = qs.parse(location.search);
      if (
        query.has('module') &&
        query.has('search') &&
        query.has('program') &&
        query.has('session') &&
        query.has('topic')
      ) {
        const filterSelected = listNotif.find(
          (listNotif) =>
            listNotif.moduleId === Number(queryParams.module) &&
            listNotif.programId === Number(queryParams.program) &&
            listNotif.sessionId === Number(queryParams.session) &&
            listNotif.topicId === Number(queryParams.topic),
        );

        if (filterSelected) {
          setFieldValue('search', queryParams.search);
          setFieldValue('program', {
            id: queryParams.program,
            title: filterSelected.programTitle,
          });
          setFieldValue('modules', {
            id: queryParams.module,
            title: filterSelected.moduleTitle,
          });
          setFieldValue('sessions', {
            id: queryParams.session,
            title: filterSelected.sessionTitle,
          });
          setFieldValue('topics', {
            id: queryParams.topic,
            title: filterSelected.topicTitle,
          });
        }
        handleSubmit();
      } else {
        resetForm();
      }
    }
  }, [location.search, notifData]);

但是,我期望这没有运行。该过滤器仅适用于贴片元件,不适用于抽屉式过滤器 在此处输入图像描述

在抽屉过滤器中我有这样的功能

 const onApplyFilter = () => {
    setFieldValue('program', {
      id: valueFilter.program.id,
      title: valueFilter.program.title,
    });

    setFieldValue('modules', {
      id: valueFilter.modules.id,
      title: valueFilter.modules.title,
    });

    setFieldValue('sessions', {
      id: valueFilter.sessions.id,
      title: valueFilter.sessions.title,
    });

    setFieldValue('topics', {
      id: valueFilter.topics.id,
      title: valueFilter.topics.title,
    });

    setFieldValue('isReplied', valueFilter.isReplied);

    handleSubmit();
    onCloseFilter();
  };

setFieldValue 是否不适用于 initialValues?我是formik的新手,还是在useEffect中处理提交?

标签: reactjsformik

解决方案


推荐阅读