#javascript #reactjs #material-ui #babeljs
#javascript #reactjs #материал-пользовательский интерфейс #babeljs
Вопрос:
Итак, моя проблема в том, что при вводе в текстовые поля требуется около 2 секунд, чтобы написать символ и вывести его в консоль, я попытался использовать React.memo и useCallback, но это не удается:/ Вот мой код:
const [userData, setUserData] = useState([]);
const handleDataChange = (e) => {
const {name, value} = e.target;
setUserData({
[name]: value
})
}
console.log(userData);
<div className="user__infoRow">
<TextField variant="filled" type="text" label="First Name" name="fname" onChange={handleDataChange} />
<TextField variant="filled" type="text" label="Last Name" name="lname" onChange={handleDataChange} />
</div>
<div className="user__infoRow">
<TextField variant="filled" type="email" label="email" name="email" onChange={handleDataChange} />
<TextField variant="filled" type="text" label="Phone number" name="phone" onChange={handleDataChange} />
</div>
P.S это мой первый пост, извините, если я сделал это неправильно
Комментарии:
1. Код отображается нормально ( хотя вы не должны входить в тело функционального компонента ) и работает здесь, в этой изолированной среде, после исправления вашей функции обновления состояния. Что еще делает этот компонент? Можете ли вы воспроизвести свою проблему в работающем codesandbox?
2. Хорошо, я нашел способ добиться того же результата, спасибо, что обратили внимание на мой вопрос!
Ответ №1:
Итак, я нашел способ добиться того же результата. Я обернул входные данные в форму и настроил ее на запуск функции onSubmit и нацеливание на поля, которые я только что использовал e.target.elements.name.value Вот код :
const handleDataChange = (e) => {
e.preventDefault();
setUserData({
["fName"] : e.target.elements.fname.value,
["lName"] : e.target.elements.lname.value,
["email"] : e.target.elements.email.value,
["phone"] : e.target.elements.phone.value,
})
}
<form className="user__info" onSubmit={handleDataChange}>
<div className="user__infoRow">
<TextField variant="filled" type="text" label="First Name" name="fname" />
<TextField variant="filled" type="text" label="Last Name" name="lname" />
</div>
<div className="user__infoRow">
<TextField variant="filled" type="email" label="email" name="email" />
<TextField variant="filled" type="text" label="Phone number" name="phone" />
</div>
</form>