reactjs - 如何在反应钩子表单中的输入字段中使用数组状态?
问题描述
应该添加“addFormData”字段以响应钩子表单,我添加了表单验证并想使用 this(addFormData) 以便我可以更新值并使用 onSubmit 方法发送到“联系人”数组状态。另外,如何在我的反应钩子表单中使用 this(onSubmit) ?我在表单输入中使用了 defaultValue,但仍然没有得到输入,它显示为空!!还可以帮助我以反应钩子形式使用我的 onSubmit 功能。我是新来的反应
这是我的代码
const { register, handleSubmit, formState: { errors } } = useForm();
const onSubmit = (data) => {
console.log(data);
}
const [addFormData, setAddFormData] = useState({
id: "",
firstname: "",
lastname: "",
surname: "",
mailid: "",
phonenumber: "",
company: "",
});
const [contacts, setContacts] = useState([
{ id: 1, firstname: "Mike", lastname: "Huston", surname: "MH", mailid: "mikehustoncorp@live.com", company: "Estra Boutique ltd.", value: false },
{ id: 2, firstname: "Richard", lastname: "", surname: "R", mailid: "mikehustoncorp@live.com", company: "Amazonia online", value: false },
{ id: 3, firstname: "James", lastname: "Dustin", surname: "JD", mailid: "mikehustoncorp@live.com", company: "Alibaba Traders .co", value: false },
{ id: 4, firstname: "Amanda", lastname: "Paul", surname: "AP", mailid: "mikehustoncorp@live.com", company: "Estra Boutique ltd.", value: false }
]);
const handleFieldChange = () => {
if (addFormData.id === "") {
const newContact = {
id: contacts.length + 1,
firstname: addFormData.firstname,
lastname: addFormData.lastname,
surname: initialData(),
mailid: addFormData.mailid,
company: addFormData.company
}
setAddFormData({
firstname: "",
lastname: "",
mailid: "",
company: "",
});
setContacts([...contacts, newContact]);
}
else {
const editedContact = {
id: editContactId,
firstname: addFormData.firstname,
lastname: addFormData.lastname,
surname: initialData(),
mailid: addFormData.mailid,
company: addFormData.company,
};
const newContacts = [...contacts];
const index = contacts.findIndex((contact) => contact.id === editContactId);
newContacts[index] = editedContact;
setContacts(newContacts);
console.log([newContacts]);
setEditContactId(null);
}
}
<div className="member-detail-popup">
<form onSubmit={handleSubmit(data => onSubmit(data, addFormData))}>
<label for="fname">Firstname</label>
<input type="text" maxLength="15" name="firstname" defaultValue={addFormData.firstname} {...register('firstname', { required: true })} placeholder="Enter first name" />
<p>{errors.firstname?.type === 'required' && "Firstname is required </p>
<label for="lname">Lastname</label>
<input type="text" maxLength="15" name="lastname" defaultValue={addFormData.lastname} {...register('lastname', { required: true })} placeholder="Enter last name" />
<p>{errors.lastname?.type === 'required' && "Lastname is required"}</p>
<label for="letters">Mail id</label>
<input type="text" maxLength="30" name="mailid" defaultValue={addFormData.mailid} {...register('mailid', { required: true, pattern: /^\w+([\.-]?\w+)*@\w+([\.-]?\w+)*(\.\w{2,3})+$/ })} placeholder=" Enter mail id" />
<p>{errors.mailid?.type === 'required' && "Mail id is required"}</p>
<p>{errors.mailid?.type === 'pattern' && "Mail id is not valid"}</p>
<label for="phone">Phone Number</label>
<input type="text" maxLength="10" name="phonenumber" defaultValue={addFormData.phonenumber} {...register('phonenumber', { required: true })} placeholder="Enter phone number" />
<p>{errors.lastname?.type === 'required' && "Phone Number is required"}</p>
<label for="company">Company</label>
<select name="company" defaultValue={addFormData.company} {...register('company', { required: true })}>
<option >Select Field</option>
<option>Estra Boutique ltd.</option>
<option>Amazonia online</option>
<option>Alibaba Traders.co</option>
<option>Jennifer Traders ltd</option>
<option>Turag teer ltd.</option>
<option>Dhaka Textile</option>
<option>Estra Builders</option>
<option>Chowdhury comp</option>
</select>
<p>{errors.company?.type === 'required' && "Please select a field"}</p>
<div class="click-retrieve">
<button type="submit" className="data-saving">Save</button>
</div>
</form>
</div>
解决方案
推荐阅读
- php - 仅在 Firefox 上提交表单时,Ajax 收到 400 Bad Request
- owasp - Owasp ZAP 的“请求钩子”
- mongodb - 如何在 MongoDB 聚合框架中将字符串拆分为字母数组?
- c++ - C++ 嵌套 SFINAE 模板产生编译错误
- apache-spark - 解析日期格式
- javascript - 在 display:flex 中,如何指定元素的宽度?
- python - 对象检测 Tensorflow 2.6-如何保存所有检查点并为所有检查点运行 eval
- r - 在ggplot直方图中排序计数
- iot - 如何查看已发布到 Azure IoT Hub 的原始数据(二进制传感器数据)?
- java - AWS EC2 上的 Spring Boot 应用程序仅在 localhost 上运行