【发布时间】:2020-10-10 21:32:25
【问题描述】:
我正在学习 react 和 react 表单,并尝试创建一个动态且可扩展的表单。我已经设置了具有type 的状态,并根据类型显示相应的输入类型(因此它可以是文本、文本区域、单选、选择、日期或复选框)。我正在尝试编写一个函数,以便它将根据表单输入的type 动态设置 on 更改,但我一直试图实现相同的目标。
所以如果type === select、event.target.value 或type === checkbox、event.target.checked 等等。
请检查此工作CodeSandbox。
查看完整代码 sn-p:-
import React from "react";
import "./styles.css";
class App extends React.Component {
state = {
Forms: [
{ name: "select", type: "select", options: ["a", "b", "c"] },
{ name: "Radio", type: "radio", options: ["a", "b", "c"] },
{ name: "Date", type: "date", value: "2018-07-22" },
{ name: "Text Input", type: "text", value: "text input" },
{
name: "Checkbox",
type: "checkbox",
options: ["a", "b", "c"],
value: false
},
{ name: "Textarea", type: "textarea", value: "text area" }
]
};
handleFormStateChange = (event, idx) => {
const target = event.target;
const form = [...this.state.forms];
form[idx].value = target.type === "select" ? target.value : "";
form[idx].value = target.type === "radio" ? target.value : "";
form[idx].value =
target.type === "date" ||
target.type === "text" ||
target.type === "textarea"
? target.value
: "";
form[idx].value = target.type === "checkbox" ? target.checked : "";
this.setState({
form
});
};
getField = field => {
switch (field.type) {
case "date":
case "text":
case "textarea":
return <input type={field.type} value={field.value} />;
case "select":
return (
<select name={field}>
{field.options.map(option => (
<option key={option} value={option}>
{option}
</option>
))}
;
</select>
);
case "radio":
case "checkbox":
return (
<div>
{field.options.map(option => (
<label>
{option}:
<input
key={option}
type={field.type}
name={option}
value={option}
/>
</label>
))}
</div>
);
default:
return <div>Unknown form field</div>;
}
};
renderForm = () => {
return this.state.Forms.map((field, index) => (
<label key={index}>
{field.name}
{this.getField(field)}
</label>
));
};
render() {
return <div>{this.renderForm()}</div>;
}
}
export default App;
我仍在努力学习并花时间使用 ReactJS,因此我们将不胜感激。太感谢了。 :)
【问题讨论】:
-
This post 可以帮助您。 :)
标签: javascript reactjs