У меня есть 3 materialUI TextFields, которые я хочу отобразить n количество раз (это n будет целочисленным вводом от пользователя перед визуализацией формы здесь я сохранил его в переменной с именем groupMembersCount ). Я использую функциональный компонент в ReactJS, определяя массив с хуками useState как:
const [groupDetails, setGroupDetails] = React.useState([
{ fullName: "", phoneNo: "", gender: "" },
]);
Это будет мой основной массив для хранения всех 3 значений (вводимых пользователем) на их соответствующие индексы. Я попытался вернуть эти 3 MaterialUI TextField динамически этим методом:
{Array.apply(null, { length: groupMembersCount }).map(
(e, i) => (
<div key={i}>
<strong>Member #{i + 1}</strong>
<div className="getIndex" name={i + 1}>
<TextField
id={Math.random()}
name="Name"
variant="outlined"
margin="none"
label="Name"
onChange={handleGroupName}
/>
<TextField
id={Math.random()}
name="phoneNo"
variant="outlined"
margin="none"
label="Mobile Number"
onChange={handleGroupPhoneNo}
/>
<TextField
id={Math.random()}
name="gender"
variant="outlined"
margin="none"
label="Gender"
onChange={handleGroupGender}
select
>
<option value="MALE">Male</option>
<option value="FEMALE">Female</option>
<option value="OTHER">Other</option>
</TextField>
</div>
</div>
)
)}
Теперь в обработчике имени handleGroupName Я делаю это, чтобы получить div (чтобы получить index [из его атрибута name], который сохраняет индекс до pu sh это значение в основном массиве groupDetails ):
const handleGroupName = (event) => {
let elem = document.getElementsByClassName("getIndex"); // get div
for (var i = 0; i < groupMembersCount; i++) {
console.log("index is: ", elem[i].getAttribute('name')); // get the index number
}
};
После всего этого у меня возникли проблемы в нескольких вещах: 1. Одно из полей формы (TextField) с полем в атрибуте имени, я не могу использовать select для создания раскрывающегося списка (запись того, что здесь показано, вызывает пустой экран), поэтому я закомментировал его. 2. В обработчике handleGroupName внутри для l oop ошибка отображается как: UserDetails.jsx: 434 Uncaught TypeError: невозможно прочитать свойство getAttribute, равное undefined. 3. Я новичок в реагировании на функциональный компонент, у меня мало опыта в этом, может ли кто-нибудь предложить более эффективные способы получения значений из этих полей формы для каждого рендеринга и объединить их как объект и сохранить в другом индексе в основном массиве, структура основного массива groupDetails определяет, как он должен выглядеть в конце.