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} />;
};