【发布时间】:2021-05-04 07:11:05
【问题描述】:
第一季度。我使用了 Autocomplete materialui 库,其中我创建了输入字段字段,该字段正在消耗一个对象,但在安慰我的值时我有未定义的值。
第二季度。如果我为项目名称字段选择值,我如何获得多个输入字段的填充值,而输入字段的其余部分,即 mrp、sellprice 等将从消耗项目名称字段值的对象中填充。(附图片)
const initialFValues = {
id: 0,
itemName: "",
mrp: "",
buyPrice: "",
sellPrice: "",
qty: "",
manufactureId: "",
manufactureDate: new Date(),
expiryDate: new Date(),
};
export default function ItemForm(props) {
const { addOrEdit, recordForEdit, invoiceId } = props;
const validate = (fieldValues = values) => {
let temp = { ...errors };
if ("itemName" in fieldValues)
temp.itemName = fieldValues.itemName ? "" : "This field is required.";
if ("mrp" in fieldValues)
temp.mrp = fieldValues.mrp.length > 1 ? "" : "Price is invalid.";
if ("buyPrice" in fieldValues)
temp.buyPrice =
fieldValues.buyPrice.length > 1 ? "" : "Price is invalid.";
if ("sellPrice" in fieldValues)
temp.sellPrice =
fieldValues.sellPrice.length > 1 ? "" : "Price is invalid.";
if ("qty" in fieldValues)
temp.qty = fieldValues.qty.length > 0 ? "" : "Qty is invalid.";
if ("manufactureId" in fieldValues)
temp.manufactureId =
fieldValues.manufactureId.length !== 0 ? "" : "This field is required.";
setErrors({
...temp,
});
if (fieldValues === values)
return Object.values(temp).every((x) => x === "");
};
const {
values,
setValues,
errors,
setErrors,
handleInputChange,
resetForm,
} = useForm(initialFValues, true, validate);
const handleSubmit = (e) => {
// console.log("InvoiceId: " + invoiceId);
e.preventDefault();
if (validate()) {
values.invoiceId = invoiceId;
addOrEdit(values, resetForm);
}
};
useEffect(() => {
if (recordForEdit != null)
setValues({
...recordForEdit,
});
values.itemName=itemName.name
}, [recordForEdit, setValues]);
// consuming from useform
const handleInputChange = e => {
const { name, value } = e.target
setValues({
...values,
[name]: value
})
console.log(values.itemName) // -> this value is undefined
if (validateOnChange)
validate({ [name]: value })
}
return (
<Form onSubmit={handleSubmit}>
<Grid container>
<Grid item xs={6}>
<Autocomplete
id="itemName"
name="itemName"
error={errors.itemName}
[enter image description here][1]value={values.itemName=itemName.name} -> this value is undefined
onChange={handleInputChange}
options={itemName}
getOptionLabel={(option) => option.name}
style={{ width: 300 }}
renderInput={(params) => (
<TextField {...params} label="Item Name" variant="outlined" />
)}
/>
{/* <Controls.Input
name="itemName"
label="Item Name"
value={values.itemName}
onChange={handleInputChange}
error={errors.itemName}
/> */}
<Controls.Input
name="mrp"
label="MRP"
value={values.mrp}
onChange={handleInputChange}
error={errors.mrp}
/>
<Controls.Input
name="buyPrice"
label="Buy Price"
value={values.buyPrice}
onChange={handleInputChange}
error={errors.buyPrice}
/>
<Controls.Input
name="sellPrice"
label="Sell Price"
value={values.sellPrice}
onChange={handleInputChange}
error={errors.sellPrice}
/>
<Controls.Input
name="qty"
label="Quantity"
value={values.qty}
onChange={handleInputChange}
error={errors.qty}
/>
</Grid>
<Grid item xs={6}>
<Controls.SelectCustom
name="manufactureId"
label="Manufacture Name"
value={values.manufactureId}
onChange={handleInputChange}
options={itemService.getItemCollection()}
error={errors.manufactureId}
/>
<Controls.DatePicker
name="manufactureDate"
label="Date of Manufacture"
autoOk={false}
value={values.manufactureDate}
onChange={handleInputChange}
/>
<Controls.DatePicker
name="expiryDate"
label="Date of Expiry"
value={values.expiryDate}
onChange={handleInputChange}
/>
<div>
<Controls.Button type="submit" text="Submit" />
<Controls.Button text="Reset" color="default" onClick={resetForm} />
</div>
</Grid>
</Grid>
</Form>
);
}
【问题讨论】:
标签: reactjs autocomplete react-hooks material-ui