在 React 中遍历表单元素数组
Iterating over form elements array in React
我有一个带有表单的 React 功能组件,onSubmit 我想遍历所有表单元素....
export default function TransactionFilter() {
return (
<form onSubmit={handleSubmit}>
<TextField id="username" /><br/>
<TextField id="password" /><br/>
</form>
)
const handleSubmit = (event) => {
event.preventDefault();
var formElements = event.target.elements
formElements.forEach(element =>
console.log(`I found this ${element}`)
);
但是这段代码给我一个错误...
react-dom.development.js:476 Uncaught TypeError: formElements.forEach is not a function
at handleSubmit (FilterForm.js:49)
at HTMLUnknownElement.callCallback (react-dom.development.js:337)
我使用 forEach 的方式不对吗?如果不是,那么在 React 中迭代表单元素数组的正确方法是什么?
元素对象实际上是一个HTMLFormControlsCollection对象。
您可以使用 Array.prototype.forEach
方法像这样迭代集合:
Array.prototype.forEach.call(event.target.elements, (element) => {
console.log(element);
})
event.target.elements
将 return 未定义
我建议以反应的方式来做,在状态中有一个包含所有表单元素的数组。
export default function TransactionFilter() {
const [formData, setFormData] = React.useState([
{ id: 'username', value:'' },
{ id: 'password', value:'' }
]);
const handleSubmit = (event) => {
event.preventDefault();
formData.forEach(element =>
console.log(`I found this ${element.value}`)
);
};
return (
<form onSubmit={handleSubmit}>
{formData.map((element, index) => {
return ( <React.Fragment>
<TextField id={element.id} value={element.value}
onChange={e => {
setFormData(
[
...formData.slice(0, index),
{ ...formData[index], value: e.target.value },
...formData.slice(index + 1)
]
);
}}
/>
<br/>
</React.Fragment>
);
})}
</form>
);
}
您还可以使用 of
语法:
const handleSubmit = event => {
event.preventDefault()
for (const element of event.target.elements) {
console.log(`I found this ${element}`)
}
}
我有一个带有表单的 React 功能组件,onSubmit 我想遍历所有表单元素....
export default function TransactionFilter() {
return (
<form onSubmit={handleSubmit}>
<TextField id="username" /><br/>
<TextField id="password" /><br/>
</form>
)
const handleSubmit = (event) => {
event.preventDefault();
var formElements = event.target.elements
formElements.forEach(element =>
console.log(`I found this ${element}`)
);
但是这段代码给我一个错误...
react-dom.development.js:476 Uncaught TypeError: formElements.forEach is not a function
at handleSubmit (FilterForm.js:49)
at HTMLUnknownElement.callCallback (react-dom.development.js:337)
我使用 forEach 的方式不对吗?如果不是,那么在 React 中迭代表单元素数组的正确方法是什么?
元素对象实际上是一个HTMLFormControlsCollection对象。
您可以使用 Array.prototype.forEach
方法像这样迭代集合:
Array.prototype.forEach.call(event.target.elements, (element) => {
console.log(element);
})
event.target.elements
将 return 未定义
我建议以反应的方式来做,在状态中有一个包含所有表单元素的数组。
export default function TransactionFilter() {
const [formData, setFormData] = React.useState([
{ id: 'username', value:'' },
{ id: 'password', value:'' }
]);
const handleSubmit = (event) => {
event.preventDefault();
formData.forEach(element =>
console.log(`I found this ${element.value}`)
);
};
return (
<form onSubmit={handleSubmit}>
{formData.map((element, index) => {
return ( <React.Fragment>
<TextField id={element.id} value={element.value}
onChange={e => {
setFormData(
[
...formData.slice(0, index),
{ ...formData[index], value: e.target.value },
...formData.slice(index + 1)
]
);
}}
/>
<br/>
</React.Fragment>
);
})}
</form>
);
}
您还可以使用 of
语法:
const handleSubmit = event => {
event.preventDefault()
for (const element of event.target.elements) {
console.log(`I found this ${element}`)
}
}