我使用的是React Admin,它使用React最终表单作为它所使用表单的底层组件。
我试图在提交时只使用已更改的字段进行REST调用。因此,假设字段A和字段B是不同的资源,将被发送到不同的REST路由,假设两者都在表单中,并且只有字段B被更改,那么只有字段B应该被发送到后端,以防止重复的多个API请求。
不管怎样,我看了一下这里,我遇到的问题是:
我有这个onSubmit处理程序:
const handleClick = useCallback(() => {
// prints 'before' value
console.log(JSON.parse(JSON.stringify(form.getState().values)));
const values = form.getState().values;
// take out Field A, because Field A is NOT to be sent in the request
const { FieldA, ...valuesToSubmit } = values;
// How can I do this part? <------
form.change('values', valuesToSubmit);
handleSubmitWithRedirect(redirect);
}, [form]); // useForm hook for react-final-form
我通过做一些类似的事情来改变单个字段的值
form.change('FieldB', 'test');
但如果我有很多领域,我不想单独改变所有领域。是否可以用form.change(...)
替换整个values
对象?
对于将来面临此问题的任何人,我通过跟踪未更改的值,然后在提交时将其值设置为undefined
,成功删除了不提交到各自后端REST路由的字段。类似这样的东西,(注意,这是与React Admin框架结合使用的,但我相信无论你在哪里使用React最终形式,它都会起作用
. . .
const { handleSubmitWithRedirect, redirect } = props;
const handleClick = useCallback(() => {
// The field that I don't want sent to the backend
form.change('fieldA', undefined);
handleSubmitWithRedirect(redirect);
}, [form]);
. . .
return (
. . .
<SaveButton
handleSubmitWithRedirect={handleClick}
/>
. . .
)