reactjs - 如何启用提交按钮当我在表单的所有输入标签中输入数据时
问题描述
我正在使用 React 项目,使用 Ant 设计框架。在我的项目中,我有四个输入标签的表单,在这里我禁用了提交按钮。现在当我在所有输入标签中输入信息时如何启用提交按钮。现在你能告诉我当我在所有输入标签中输入所有信息时如何启用提交按钮。
这是我的代码 App.js
import React, { useState } from "react";
import { Row, Col, Button, Card, Form, Input, Select } from "antd";
const Guestdetails = () => {
const [data, setData] = useState(null)
const handleChange = ({ target }) => {
const { name, value } = target
const newData = Object.assign({}, data, { [name]: value })
setData(newData)
}
const handleSubmit = (e) => {
e.preventDefault()
console.log(data)
}
const prefixSelector = (
<Form.Item name="prefix" noStyle>
<Select
style={{
width: 30,
height: 10,
}}
>
<Option value="86">+86</Option>
<Option value="87">+87</Option>
</Select>
</Form.Item>
);
return (
<div>
<div className="customizedCards">
<Card className="cardStyle">
<div className="main-form">
<h5 className="idDetails">GUEST DETAILS</h5>
<Form style={{marginLeft: "-10px"}}>
<Form.Item
name="name"
noStyle
rules={[{ required: true, message: 'firstname is required' }]}
>
<Input type="text" name='firstname' onChange={handleChange} style={{ width: 400 }} placeholder="Firstname" />
</Form.Item>
<Form.Item
name="name"
noStyle
rules={[{ required: true, message: 'lastname is required' }]}
>
<Input type="text" name='lastname' onChange={handleChange} style={{ width: 400 }} placeholder="Lastname" />
</Form.Item>
<Form.Item
name="name"
noStyle
rules={[{ required: true, message: 'email is required' }]}
>
<Input type="email" name='email' onChange={handleChange} style={{ width: 400 }} placeholder="Email" />
</Form.Item>
<Form.Item
name="phone"
rules={[
{
required: true,
message: 'Please input your phone number!',
},
]}
>
<Input type="number" name='phonenumber' onChange={handleChange} addonBefore={prefixSelector} style={{ width: 400 }} placeholder="Phone Number" />
</Form.Item>
<Button className="submit" onClick={handleSubmit} disabled type="primary">Submit</Button>
</Form>
</div>
</Card>
</div>
</div>
)
}
export default Guestdetails
解决方案
您可以创建一个 useEffect 来监视数据更改,然后检查是否所有字段都已填写。
const [isValid, setIsValid] = useState(false);
useEffect(() => {
if (data !== null) {
setIsValid(Object.values(data).every((value) => value !== ""));
}
}, [data]);
之后,您可以将其添加到您的按钮中。
<Button
className="submit"
onClick={handleSubmit}
disabled={!isValid} // Add this
type="primary"
>
Submit
</Button>
这是一个有效的代码笔:https://codesandbox.io/s/react-fiddle-forked-cpkn6?file=/src/Components/guest.js: 3018-3229
编辑:使用具有空值而不是 null 的属性更新数据的初始对象。
const [data, setData] = useState({
firstname: "",
lastname: "",
email: ""
});
推荐阅读
- python-3.x - 如何在绘制后修改散点图的颜色图
- jquery-ui - jQuery Ui 小部件菜单在悬停父项上显示所有子项
- javascript - Resize text to fit div
- sql - Remove function call from select statement
- php - 在多维数组中搜索并返回不支持变量的结果
- xamarin - Xamarin IOS 缺少视图控制器
- jquery - 如何在 CSS 中构建一个两列并排的简单手风琴布局?
- macos - 将默认 vim 设置为编辑器而不是 macvim
- mysql - MySQL 新手,我被困在 SAKILA 练习中
- javascript - 如果用户不接受 cookie,则禁用 HTTP 严格传输安全 (HSTS)