Modal 对话框组件 #
基本用法 #
jsx
import {
Modal,
ModalOverlay,
ModalContent,
ModalHeader,
ModalFooter,
ModalBody,
ModalCloseButton,
Button,
useDisclosure,
} from '@chakra-ui/react'
function Example() {
const { isOpen, onOpen, onClose } = useDisclosure()
return (
<>
<Button onClick={onOpen}>打开对话框</Button>
<Modal isOpen={isOpen} onClose={onClose}>
<ModalOverlay />
<ModalContent>
<ModalHeader>对话框标题</ModalHeader>
<ModalCloseButton />
<ModalBody>
对话框内容
</ModalBody>
<ModalFooter>
<Button colorScheme="blue" mr={3} onClick={onClose}>
关闭
</Button>
<Button variant="ghost">其他操作</Button>
</ModalFooter>
</ModalContent>
</Modal>
</>
)
}
Modal 尺寸 #
jsx
<Modal size="xs">超小</Modal>
<Modal size="sm">小</Modal>
<Modal size="md">中等(默认)</Modal>
<Modal size="lg">大</Modal>
<Modal size="xl">超大</Modal>
<Modal size="full">全屏</Modal>
居中 Modal #
jsx
<Modal isCentered>
{/* 内容 */}
</Modal>
滚动行为 #
jsx
<Modal scrollBehavior="inside">
{/* 内容超出时可滚动 */}
</Modal>
实用示例 #
确认对话框 #
jsx
function ConfirmModal({ isOpen, onClose, onConfirm, title, message }) {
return (
<Modal isOpen={isOpen} onClose={onClose} isCentered>
<ModalOverlay />
<ModalContent>
<ModalHeader>{title}</ModalHeader>
<ModalCloseButton />
<ModalBody>{message}</ModalBody>
<ModalFooter>
<Button variant="ghost" mr={3} onClick={onClose}>
取消
</Button>
<Button colorScheme="red" onClick={onConfirm}>
确认
</Button>
</ModalFooter>
</ModalContent>
</Modal>
)
}
表单对话框 #
jsx
function FormModal({ isOpen, onClose }) {
const [formData, setFormData] = useState({ name: '', email: '' })
const handleSubmit = () => {
console.log(formData)
onClose()
}
return (
<Modal isOpen={isOpen} onClose={onClose}>
<ModalOverlay />
<ModalContent>
<ModalHeader>添加用户</ModalHeader>
<ModalCloseButton />
<ModalBody>
<VStack spacing={4}>
<FormControl>
<FormLabel>姓名</FormLabel>
<Input
value={formData.name}
onChange={(e) => setFormData({ ...formData, name: e.target.value })}
/>
</FormControl>
<FormControl>
<FormLabel>邮箱</FormLabel>
<Input
value={formData.email}
onChange={(e) => setFormData({ ...formData, email: e.target.value })}
/>
</FormControl>
</VStack>
</ModalBody>
<ModalFooter>
<Button variant="ghost" mr={3} onClick={onClose}>
取消
</Button>
<Button colorScheme="blue" onClick={handleSubmit}>
保存
</Button>
</ModalFooter>
</ModalContent>
</Modal>
)
}
Modal 属性速查表 #
| 属性 | 说明 | 值 |
|---|---|---|
| isOpen | 是否打开 | boolean |
| onClose | 关闭回调 | function |
| size | 尺寸 | xs, sm, md, lg, xl, full |
| isCentered | 居中 | boolean |
| scrollBehavior | 滚动行为 | inside, outside |
下一步 #
现在你已经掌握了 Modal 组件,接下来学习 Drawer 抽屉,了解如何使用侧边抽屉组件!
最后更新:2026-03-28