我有一个API,提供输入类型(文本,单选,或日期时间,下拉)。我们显示的输入字段或下拉输入字段根据attriput_code。输入类型可能是不同的根据属性frontend_input类型。
现在我想获取所有类型的字段,并在表单提交中更改值。
{attributes?.map(subOption => {
switch (subOption?.frontend_input) {
case 'text':
return
<Controller
name={subOption.attribute_code}
control={control}
render={({ field }) => (
<TextField
{...field}
className="mt-8 mb-16"
error={!!errors.subOption.attribute_code}
required
label="Tax Excluded Price"
helperText={errors?.subOption?.attribute_code?.message}
autoFocus
id={subOption.attribute_code}
variant="outlined"
fullWidth
/>
)}
/>;
case 'select':
return (
<>
<Controller
name={subOption.attribute_code}
control={control}
render={({ field }) => (
<Select
className="mt-8 mb-16"
labelId="demo-simple-select-helper-label"
id={subOption.attribute_code}
value=""
label={subOption.default_frontend_label}
style={{ margin: "10px 0px" }}
onChange={handleChange}
fullWidth
>
<MenuItem key="" value="" selected >
{subOption?.default_frontend_label}
</MenuItem>
{subOption?.options?.map(selectOption => {
return (
<MenuItem key={selectOption?.value} value={selectOption?.value}>
{selectOption?.label}
</MenuItem>
);
})}
</Select>
)}
/>
</>
)
case 'date':
return (
<>
<LocalizationProvider dateAdapter={AdapterDayjs}>
<DatePicker
name={subOption.attribute_code}
className="mt-8 mb-16"
label="Basic example"
value="2022-10-10"
onChange={(newValue) => {
setValue(newValue);
}}
renderInput={(params) => <TextField {...params} />}
fullWidth
/>
</LocalizationProvider>
</>
)
default:
return (
<><h1>not found</h1></>
)
}
})}
对于特定的输入字段类型和名称(如watch('name ')),我们只有下面的代码。
const { formState, watch, getValues } = methods;
const name = watch('name');
function handleSaveProduct() {
console.log("Form Submit Vlaue");
console.log(getValues());
dispatch(saveProduct(getValues()));
}
1条答案
按热度按时间3j86kqsm1#
首先,需要保存在对象Array中动态创建的输入,如下所示:
在此示例中,
listid
是自定义属性i,使其能够使用onChange
方法更新值。现在,您将Map通过状态,在本例中为
formData
。因此,每次更新值时,表单将重新呈现并保持同步。使用自定义属性的输入如下所示:
对于输入更改,请执行以下操作:
该函数执行以下操作:
这将根据用于创建输入的对象的结构而变化,但这就是想法。
如果你需要在用户交互之后添加输入,你可以创建一个函数来更新对象键,同时保留值的状态。