Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/436.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Formik-状态和初始值被覆盖_Javascript_Reactjs_Formik - Fatal编程技术网

Javascript Formik-状态和初始值被覆盖

Javascript Formik-状态和初始值被覆盖,javascript,reactjs,formik,Javascript,Reactjs,Formik,我想为从后端获取的一些元数据实现一个编辑对话框。为此,我使用了Formik。当用户更改一个元数据字段时,将显示一个图标,指示该字段已更改。提交时,只应将更新的值发送到后端。我在其他帖子中读到,您应该将当前字段值与提供给Formik表单的初始值进行比较。对于单个值,如更改的标题,这非常有效。然而,我需要实现的表单也有多个值字段,比如creators。我实现了一个自定义字段,用户可以在其中为一个字段选择/提供多个值。此字段的值以Formik格式保存为数组。问题是Formik还将此字段的初始值更改为当

我想为从后端获取的一些元数据实现一个编辑对话框。为此,我使用了Formik。当用户更改一个元数据字段时,将显示一个图标,指示该字段已更改。提交时,只应将更新的值发送到后端。我在其他帖子中读到,您应该将当前字段值与提供给Formik表单的初始值进行比较。对于单个值,如更改的标题,这非常有效。然而,我需要实现的表单也有多个值字段,比如creators。我实现了一个自定义字段,用户可以在其中为一个字段选择/提供多个值。此字段的值以Formik格式保存为数组。问题是Formik还将此字段的
初始值
更改为当前保存的数组,因此我无法再检查该字段是否已更新。此外,我将后端提供的元数据字段保存在状态值中,因为响应包含进一步实现所需的一些进一步信息。此状态值还包含元数据字段的当前值(更新前),并用作Formik表单的初始值。奇怪的是,多字段组件不仅覆盖Formik表单字段的
初始值
,而且还覆盖处于仅读取且从不直接更新状态的字段值

我的元数据编辑对话框如下所示:

const editMetadataEventsModel=({close,selectedRows,updateBulkMetadata})=>{
const{t}=useTranslation();
常量[selectedEvents,setSelectedEvents]=useState(selectedRows);
常量[metadataFields,setMetadataFields]=useState({});
常量[fetchedValues,setFetchedValues]=useState(null);
useffect(()=>{
异步函数fetchData(){
让eventIds=[];
selectedEvents.forEach((event)=>eventIds.push(event.id));
//所选事件的元数据从后端获取并保存为状态
const responseMetadataFields=等待fetchEditMetadata(EventId);
让initialValues=getInitialValues(responseMetadataFields);
setFetchedValues(初始值);
setMetadataFields(responseMetadataFields);
}
fetchData();
}, []);
常量handleSubmit=(值)=>{
const response=updateBulkMetadata(元数据字段、值);
close();
};
返回(

这是更改前后
元数据字段
获取值
的状态: