UI 组件库
24.1 Ant Design 使用示例
javascript
import { Button, Input, Form, Table, Modal, message } from "antd";
function UserManagement() {
const [form] = Form.useForm();
const [isModalVisible, setIsModalVisible] = useState(false);
const columns = [
{ title: "Name", dataIndex: "name", key: "name" },
{ title: "Email", dataIndex: "email", key: "email" },
{
title: "Action",
key: "action",
render: () => (
<Button onClick={() => setIsModalVisible(true)}>Edit</Button>
),
},
];
const handleSubmit = (values) => {
message.success("User created successfully!");
setIsModalVisible(false);
};
return (
<div>
<Button type="primary" onClick={() => setIsModalVisible(true)}>
Add User
</Button>
<Table columns={columns} dataSource={[]} />
<Modal
title="Create User"
visible={isModalVisible}
onCancel={() => setIsModalVisible(false)}
onOk={() => form.submit()}
>
<Form form={form} onFinish={handleSubmit}>
<Form.Item
name="name"
rules={[{ required: true, message: "Please input name!" }]}
>
<Input placeholder="Name" />
</Form.Item>
<Form.Item name="email" rules={[{ type: "email" }]}>
<Input placeholder="Email" />
</Form.Item>
</Form>
</Modal>
</div>
);
}24.2 Material-UI 使用示例
javascript
import {
Button,
TextField,
Table,
TableContainer,
TableHead,
TableRow,
TableCell,
TableBody,
Dialog,
DialogTitle,
DialogContent,
} from "@mui/material";
function UserManagement() {
const [open, setOpen] = useState(false);
const [formData, setFormData] = useState({ name: "", email: "" });
const handleInputChange = (e) => {
const { name, value } = e.target;
setFormData((prev) => ({ ...prev, [name]: value }));
};
const handleSubmit = () => {
console.log("Submitting:", formData);
setOpen(false);
};
return (
<div>
<Button variant="contained" onClick={() => setOpen(true)}>
Add User
</Button>
<TableContainer>
<Table>
<TableHead>
<TableRow>
<TableCell>Name</TableCell>
<TableCell>Email</TableCell>
</TableRow>
</TableHead>
<TableBody>{/* 数据行 */}</TableBody>
</Table>
</TableContainer>
<Dialog open={open} onClose={() => setOpen(false)}>
<DialogTitle>Create User</DialogTitle>
<DialogContent>
<TextField
name="name"
label="Name"
fullWidth
value={formData.name}
onChange={handleInputChange}
margin="normal"
/>
<TextField
name="email"
label="Email"
fullWidth
value={formData.email}
onChange={handleInputChange}
margin="normal"
/>
<Button onClick={handleSubmit} variant="contained">
Submit
</Button>
</DialogContent>
</Dialog>
</div>
);
}