React-admin提供useGetOne
和useCreate
之类的钩子,以使用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} />;
};