【发布时间】:2021-05-26 12:26:46
【问题描述】:
我正在构建一个带有可重用组件的反应表单。
我想更新我的 json 以便我可以嵌套一些数据,但是我遇到了一个“受控与不受控”的错误(再次!),我无法解决。我一直在研究它,但我可能缺乏正确的词汇来提高效率。我应该在哪里或如何定义“宠物”..?
后来,我的目标是能够为一个主人添加几只宠物。
宠物表格
import React, { useState, useEffect } from 'react';
import Controls from './reusables/Controls';
import { useForm, Form } from './reusables/useForm';
const initialFieldValues = {
id: 0,
owner: '',
pet : [{
petName: '',
petBreed: ''
}]
}
export default function PetsForm(props) {
const {
values,
setValues,
errors,
setErrors,
handleInputChange,
resetForm
} = useForm(initialFieldValues, true, validate);
return (
<Paper>
<Box>
<Controls.Input
label="Owner"
name='owner'
placeholder="Owner"
value={values.owner = values.owner.toUpperCase()}
onChange={handleInputChange}
/>
<Controls.Input
label="PetName"
name='petName'
placeholder="Pet Name"
value={values.petName = values.petName.toUpperCase()}
onChange={handleInputChange}
/>
<Controls.Input
label="PetBreed"
name='petBreed'
placeholder="Pet Breed"
value={values.petBreed}
onChange={handleInputChange}
/>
</Box>
</Paper>
etc...
}
我的使用表单
export function useForm(initialFieldValues, validateOnChange=false, validate) {
const [values, setValues] = useState(initialFieldValues);
const [errors, setErrors] = useState({});
const handleInputChange = event => {
const { name, value } = event.target
setValues({
...values,
[name]: value,
})
if(validateOnChange)
validate({
[name]: value,
})
}
return {
values,
setValues,
errors,
setErrors,
handleInputChange,
};
}
【问题讨论】: