#reactjs #forms #input #react-hooks #setstate
#reactjs #формы #ввод #реагировать-перехваты #setstate
Вопрос:
У меня проблема с входными значениями useState.
Что я получил:
const [document, setDocument] = useState([
{
documentName: '',
documentDate: '',
documentInfo: '',
documentContent: ''
},
{
documentName: '',
documentDate: '',
documentInfo: '',
documentContent: ''
}
])
return ({
document.map((item, index) => {
return (
<>
<Grid item xs={3}>
<label>Typ dokumentu:</label>
<SelectInput
fullwidth
onChange={(e) =>
setDocument({
...document,
[e.target.name]: document.map((value, j) => {
if (index === j) value = e.target.value;
return value;
}),
})
}
value={document.documentName}
name="documentName"
register={register}
/>
</Grid>
<Grid item xs={1}>
<label>Sekcja:</label>
<SelectInput
fullwidth
onChange={(e) =>
setDocument({
...document,
[e.target.name]: document.map((value, j) => {
if (index === j) value = e.target.value;
return value;
}),
})
}
value={document.documentDate}
name="documentDate"
register={register}
/>
</Grid>
<Grid item xs={1}>
<label>Strefa:</label>
<SelectInput
fullwidth
onChange={(e) =>
setDocument({
...document,
[e.target.name]: document.map((value, j) => {
if (index === j) value = e.target.value;
return value;
}),
})
}
value={document.documentInfo}
name="documentInfo"
/>
</Grid>
<Grid item xs={1}>
<label>SRS:</label>
<SelectInput
fullwidth
onChange={(e) =>
setDocument({
...document,
[e.target.name]: document.map((value, j) => {
if (index === j) value = e.target.value;
return value;
}),
})
}
value={document.documentContent}
name="documentContent"
/>
</Grid>
</>
);
});
}
)
Чего я хочу? Когда я меняю, например, DocumentName во втором документе, тогда я получаю:
[
{
documentName:'',
documentDate:'',
documentInfo:'',
documentContent:''
},
{
documentName:'DOCUMENTEXAMPLENAME',
documentDate:'',
documentInfo:'',
documentContent:''
}
]
Я не могу создать функцию onChange, в которой я устанавливаю эти данные так, как я описал выше.
Я пытаюсь использовать метод handleChange, где:
const handleChange = (e,index) => {
const items = [...document]
items[index][e.target.name] = e.target.value
setDocument(items)
}
Но затем это изменяет правильное значение, но в каждом объекте.
Пожалуйста, помогите мне!!
Комментарии:
1. в случае функции handleChange scenerio , как вы передаете значения в функцию handlechange
2. Я вызываю это в функции onChange внутри компонентов ввода onChange {handleChange}
Ответ №1:
Написал свой код здесь
Теперь я вижу, что вы изменили свой вопрос, предоставив ту же функцию, что и я, но в песочнице она работает хорошо. Может быть, в вашем исходном коде есть что-то еще?