【发布时间】:2020-01-29 08:16:33
【问题描述】:
我对如何在 2 种情况下使用钩子更新 React 状态有语法疑问。
1) 我有一个名为公司的州和一个填写它的表格。在联系部分,有两个输入是指公司员工(姓名和电话号码)。但是,如果公司有多个要联系的员工,则有一个“添加更多联系人”按钮,该按钮必须重复相同的输入(当然,针对第二个联系人)。我怎样才能做到这一点?我的意思是,要在状态内的数组“联系人”中生成另一个索引,增加具有该数组的对象内的 totalOfContacts 并创建输入标签,以便用户可以键入第二个联系人的数据?
2) 当我输入任何输入时,代码会触发 handleChange 函数。 “名称”和“城市”已经更新了状态,因为它们是简单的状态。但是我如何更新联系人姓名和他的电话号码,因为它们是状态内数组索引的一部分?
下面的代码已经在运行,我的 2 个问题正是注释的两行(第 20 行和第 29 行)。
“保存”按钮只是简单地控制台记录结果,以便我们可以监控它们。
现在谢谢。
import React, { useState, useEffect } from "react";
export default () => {
const [company, setCompany] = useState({
name: "", city: "",
contact: {
totalOfContact: 1,
contacts: [
{id: 0, contactName: "", telephoneNumber: ""}
]
}
})
useEffect(() => {
console.log("teste");
})
const handleChange = item => e => {
if (item === "contactName" || "telephone") {
// How can I set company.contact.contacts[<current_index>].contactName/telephoneNumber with the data typed?
} else {
setCompany({ ...company, [item]: e.target.value })
}
}
const handleClick = (e) => {
e.preventDefault();
if (e.target.value === "add") {
// How can I set company.contact.totalOfContact to 2 and create one more set of inputs tags for a second contact?
} else {
console.log(`The data of the company is: ${company}`);
}
}
return (
<div>
<form>
<h3>General Section</h3>
Name: <input type="text" onChange = {handleChange("name")} value = {company.name} />
<br />
City: <input type="text" onChange = {handleChange("city")} value = {company.city} />
<br />
<hr />
<h3>Contacts Section:</h3>
Name: <input type="text" onChange = {handleChange("contactName")} value = {company.contact.contacts[0].name} />
Telephone Numer: <input type="text" onChange = {handleChange("telephone")} value = {company.contact.contacts[0].telephoneNumber} />
<br />
<br />
<button value = "add" onClick = {(e) => handleClick(e)} >Add More Contact</button>
<br />
<br />
<hr />
<button value = "save" onClick = {(e) => handleClick(e)} >Save</button>
</form>
</div>
)
}
【问题讨论】:
-
嗨 Raphael,检查我的解决方案,如果有帮助,请告诉我。
标签: javascript reactjs jsx react-hooks