javascript - 从反应js中的表单获取数据
问题描述
我开发了一个应用程序,用户可以在主表单标签内添加动态字段,这样他们就可以添加任意数量的字段。现在我有 2 个按钮:
Entire Form Submit
和Dynamic form Submit
。
单击第一个我得到整个数据表单,但是当我单击第二个时,我也得到相同的数据,但我只想从中获取数据<DynamicFormComponent/>
。单击我想进入的第二个按钮,我将获得的数据:
const onFinishDynamic = values => {
console.log("Received values of dynamic form:", values);
};
现在,代码如下所示:
//Main form
const MainForm = () => {
const onFinish = values => {
console.log("Success:", values);
};
const onFinishFailed = errorInfo => {
console.log("Failed:", errorInfo);
};
return (
<Form
{...layout}
name="basic"
initialValues={{ remember: true }}
onFinish={onFinish}
onFinishFailed={onFinishFailed}
>
<Form.Item
label="Username"
name="username"
rules={[{ required: true, message: "Please input your username!" }]}
>
<Input />
</Form.Item>
<Form.Item
label="Password"
name="password"
rules={[{ required: true, message: "Please input your password!" }]}
>
<Input.Password />
</Form.Item>
<Form.Item>
<DynamicForm />
</Form.Item>
<Form.Item {...tailLayout}>
<Button type="primary" htmlType="submit">
Entire Form Submit
</Button>
</Form.Item>
</Form>
);
};
//Dynamic Form
const DynamicForm = () => {
const onFinishDynamic = values => {
console.log("Received values of dynamic form:", values);
};
return (
<div>
<Form.List name="users">
{(fields, { add, remove }) => {
return (
<div>
{fields.map(field => (
<Space
key={field.key}
style={{ display: "flex", marginBottom: 8 }}
align="start"
>
<Form.Item
{...field}
name={[field.name, "first"]}
fieldKey={[field.fieldKey, "first"]}
rules={[{ required: true, message: "Missing first name" }]}
>
<Input placeholder="First Name" />
</Form.Item>
<Form.Item
{...field}
name={[field.name, "last"]}
fieldKey={[field.fieldKey, "last"]}
rules={[{ required: true, message: "Missing last name" }]}
>
<Input placeholder="Last Name" />
</Form.Item>
<MinusCircleOutlined
onClick={() => {
remove(field.name);
}}
/>
</Space>
))}
<Form.Item>
<Button
type="dashed"
onClick={() => {
add();
}}
block
>
<PlusOutlined /> Add field
</Button>
</Form.Item>
</div>
);
}}
</Form.List>
<Form.Item>
<Button type="primary" htmlType="submit">
Dynamic form Submit
</Button>
</Form.Item>
</div>
);
};
问题:如何点击以上2个按钮获得不同的数据?
解决方案
您可以获取值,但在挂钩中。我已经修改了您的组件,并且您使用反应的基本原理在 DynamicForm 上获得了更新的值。
您的MainForm.js看起来像
import React from "react";
import ReactDOM from "react-dom";
import "antd/dist/antd.css";
import "./index.css";
import { Form, Input, Button } from "antd";
import DynamicForm from "./DynamicForm";
const layout = {
labelCol: { span: 8 },
wrapperCol: { span: 16 }
};
const tailLayout = {
wrapperCol: { offset: 8, span: 16 }
};
const MainForm = () => {
const [val, setVal] = React.useState({});
const onFinish = values => {
console.log("Success:", values);
setVal(values.users);
};
const onFinishFailed = errorInfo => {
console.log("Failed:", errorInfo);
};
return (
<Form
{...layout}
name="basic"
initialValues={{ remember: true }}
onFinish={onFinish}
onFinishFailed={onFinishFailed}
>
<Form.Item
label="Username"
name="username"
rules={[{ required: true, message: "Please input your username!" }]}
>
<Input />
</Form.Item>
<Form.Item
label="Password"
name="password"
rules={[{ required: true, message: "Please input your password!" }]}
>
<Input.Password />
</Form.Item>
<Form.Item>
<DynamicForm abc={val}/>
</Form.Item>
<Form.Item {...tailLayout}>
<Button type="primary" htmlType="submit">
Entire Form Submit
</Button>
</Form.Item>
</Form>
);
};
ReactDOM.render(<MainForm />, document.getElementById("container"));
您的dynamicForm.js如下所示:
import React from "react";
import ReactDOM from "react-dom";
import "antd/dist/antd.css";
import "./index.css";
import { Form, Input, Button, Space } from "antd";
import { MinusCircleOutlined, PlusOutlined } from "@ant-design/icons";
const DynamicForm = (props) => {
React.useEffect(()=>{
console.log('Received values:-', props.abc)
},[props.abc])
return (
<div>
<Form.List name="users">
{(fields, { add, remove }) => {
return (
<div>
{fields.map(field => (
<Space
key={field.key}
style={{ display: "flex", marginBottom: 8 }}
align="start"
>
<Form.Item
{...field}
name={[field.name, "first"]}
fieldKey={[field.fieldKey, "first"]}
rules={[{ required: true, message: "Missing first name" }]}
>
<Input placeholder="First Name" />
</Form.Item>
<Form.Item
{...field}
name={[field.name, "last"]}
fieldKey={[field.fieldKey, "last"]}
rules={[{ required: true, message: "Missing last name" }]}
>
<Input placeholder="Last Name" />
</Form.Item>
<MinusCircleOutlined
onClick={() => {
remove(field.name);
}}
/>
</Space>
))}
<Form.Item>
<Button
type="dashed"
onClick={() => {
add();
}}
block
>
<PlusOutlined /> Add field
</Button>
</Form.Item>
</div>
);
}}
</Form.List>
<Form.Item>
<Button type="primary" htmlType="submit">
Dynamic form Submit
</Button>
</Form.Item>
</div>
);
};
export default DynamicForm;
推荐阅读
- php - Mysql查询计数某些值
- python - 我们如何在 django 中加入两个表?
- python - 如何将 python 烧瓶应用程序调试到 VS Code 2017 中
- rust - Rust 中的文字字符串和 Args 有什么区别?
- mysql - 使用 GPS、文本和排名关键字进行查询会慢 1.3 秒吗?
- coding-style - 一个神奇的数字矫枉过正
- mailchimp-api-v3.0 - Mailchimp API 3.0。需要检索特定模板 HTML
- python - IBM- VisualRecognitionV3- DeprecationWarning:VisualRecognitionV3 是一个已弃用的函数
- .net - 如何使用 SetWindowPos 定位窗口?
- angular - 如何在Angular 6中过滤Angular Pipe中对象内的对象字段?