как вызвать ответный хук в обратном вызове нажатия кнопки в реагирующем админе или что делать вместо этого? - PullRequest
1 голос
/ 04 февраля 2020

React-admin предоставляет хуки типа useGetOne и useCreate для чтения и записи данных с помощью вызовов покоя.

Мне нужно создать новую запись в функции обратного вызова кнопки после сбора некоторых данных из разных источников. К сожалению, не разрешается вызывать ответные хуки из обратных вызовов. Так что я могу сделать вместо этого?

Моя проблема в том, что я до сих пор не понял, как работает РЕАКТ и окончательная форма. Я из угла ASP. NET, поэтому я знаком с концепцией элементов управления, которая, очевидно, весьма удивительно отличается.

Приведенный ниже код вызывает следующую ошибку во время выполнения:

Ошибка: неверный вызов перехвата. Хуки могут быть вызваны только внутри тела компонента функции. Это может произойти по одной из следующих причин: 1. У вас могут быть несовпадающие версии React и средства визуализации (например, React DOM). 2. Вы можете нарушать Правила Крюков 3. У вас может быть несколько копий React в одном приложении. См. / ссылка удалена / для получения советов о том, как отладить и исправить эту проблему.

Ошибка возникает внутри 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} />;
    };
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...