У меня есть синтаксическое сомнение относительно того, как обновить состояние React с использованием хуков в 2 ситуациях.
1) У меня есть состояние, называемое компанией, и форма, которая его заполняет. В разделе контактов есть два входа, относящихся к сотруднику компании (имя и номер телефона). Но если с компанией нужно связаться более чем с одним сотрудником, есть кнопка «Добавить еще контакт», которая должна дублировать одни и те же входные данные (конечно, нацеливаясь на второй контакт). Как я могу это сделать? Я имею в виду, чтобы сгенерировать еще один индекс в массиве «contacts» внутри состояния, увеличить totalOfContacts внутри объекта, который имеет этот массив, и создать теги ввода, чтобы пользователь мог вводить данные второго контакта?
2) КогдаЯ набираю любые входы, код запускает функцию handleChange. «Имя» и «город» уже обновляют состояние, потому что это простые состояния. Но как я могу обновить имя контакта и его номер телефона, поскольку они являются частью индекса массива внутри штата?
Код ниже уже работает, и мои 2 вопроса - это точно две прокомментированные строки (строки 20 и 29).
Кнопка «Сохранить» просто console.log результатов, чтобы мы могли отслеживать их.
Спасибо за сейчас.
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>
)
}