如何在react-admin中的按钮单击回调中调用react钩子?

时间:2020-02-04 15:36:48

标签: reactjs material-ui react-admin react-final-form

React-admin提供useGetOneuseCreate之类的钩子,以使用rest调用读取和写入数据。

从不同来源收集一些数据后,我需要在按钮回调函数中创建新记录。不幸的是,不允许从回调中调用反应挂钩。那我该怎么办呢?

我的问题是我仍然不了解REACT和最终形式的工作方式。我来自ASP.NET角落,所以我熟悉控件的概念,这显然有很大不同。

下面的代码在运行时引发以下错误:

错误:无效的挂钩调用。挂钩只能在身体内部使用 功能组件。可能发生以下情况之一 原因:
1.您的React和渲染器版本可能不匹配(例如React DOM)
2.您可能违反了《钩子规则》
3.您可能在同一应用程序中拥有多个React副本。有关如何调试和解决此问题的提示,请参见/ link /。

该错误发生在GetMeasurementTemplate()内部,该错误使用另一个钩子getOne()来获取记录。

const createMeasurementJob = ( record ) => {
        var counter = 0;
        if (record.freimessen.messungen.length > 0) {
            record.freimessen.messungen.forEach(element => {
                counter++;
                var job = {};
                job.internalOrderNumber = "TEST" + record.id + "-" + counter;
                const measurement = GetMeasurementTemplate(element.ort);
                job.locationId = measurement.location;
                job.substanceIds = measurement.substances;
                job.comment = element.kommentar;
                job.assigneeId = element.gaspruefer;
                job.date = record.arbeit.ab;

                // #### error: invalid hook call ####
                const [create, { loading, error }] = useCreate('jobs', job);  //* BANG! *//
                if (error) { return false }
            })
        }
        return true;
    };

   const GetMeasurementTemplate = (id) => {
      // #### error: invalid hook call ####
      const { data, loading, error } = useGetOne('LocationSubstanceMapping', id);
      if (loading) { return <LinearProgress />; }
      if (error) { return <p>ERROR</p>; }
      return data;
    };

    const CSEButton = ({ handleSubmitWithRedirect, ...props }) => {
        const form = useForm();
        var formdata = form.getState().values;
        const handleClick = useCallback(() => {

            createMeasurementJob(formdata)
        }, [form]);

        return <SaveButton {...props} handleSubmitWithRedirect={handleClick} />;
    };

0 个答案:

没有答案