#reactjs #onchange
#reactjs #onchange
Вопрос:
Я новичок в react. Я хотел бы получить значение из входных данных в массиве объектов. Но при onChange ввода он добавляет все буквы в массив. Я бы хотел собрать только последнюю запись. Как я могу это сделать?
<input
type="text"
placeholder="Ecrivez votre question"
onChange={(event) => {
let tab = [...questionsTitle];
tab.push({
index: index,
type: questionType[index],
title: event.target.value,
});
setQuestionsTitle(tab);
}}
></input>
Как вы можете видеть на скриншоте, мой массив очень длинный. Как я могу получить значение, не просматривая все буквы?
Заранее благодарю вас.
Ответ №1:
Обновите значение, если оно уже существует, в противном случае отправьте новый объект. Ниже приведен пример кода
<input
type="text"
placeholder="Ecrivez votre question"
onChange={(event) => {
let tab = [...questionsTitle];
let tabIndex = tab.findIndex(x => x.index === index);
if (tabIndex !== -1) {
tab[tabIndex].type = questionType[index]
tab[tabIndex].title = event.target.value
} else {
tab.push({
index: index,
type: questionType[index],
title: event.target.value,
});
}
setQuestionsTitle(tab);
}}
Комментарии:
1. Это работает, спасибо! Не могли бы вы объяснить мне эту строку? пусть tabIndex = tab.findIndex(x => x.index === index); Я не понимаю эту часть: x => x.index
2. В этой строке мы проверяем индекс текущего объекта. если существует, то мы обновим существующий объект по индексу, в противном случае мы отправим новый объект.
3. ОК. Я впервые увидел, что это написано так. Большое вам спасибо за объяснение.
Ответ №2:
Вы можете захватить последнее, используя квадратные скобки, например, event.target.value[-1] Вы можете скопировать приведенный ниже код.
<input
type="text"
placeholder="Ecrivez votre question"
onChange={(event) => {
let tab = [...questionsTitle];
tab.push({
index: index,
type: questionType[index],
title: event.target.value[-1],
});
setQuestionsTitle(tab);
}}
></input>
Комментарии:
1. Спасибо за ваш ответ. Это не работает. У меня все еще много записей, но теперь заголовок не определен.
2. мне нужно было получить длину
let length = e.target.value.length;
первого, затемsetAnswer(e.target.value[length - 1])