Chakra UI Modal无法正常运行 触发hook后屏幕空白问题求助
问题原因排查
- 导入不存在的组件触发运行时报错
Chakra UI官方并未导出Lorem组件,该组件仅为官方文档演示时的占位示例组件,业务代码中直接导入使用不存在的组件会触发JS运行时错误,直接导致页面白屏。 - Modal状态完全隔离无法联动
你在父组件Swibc中通过useDisclosure定义了一组控制弹窗的状态isOpen/onOpen/onClose,但子组件DialogModal内部又单独定义了一组独立的useDisclosure状态,两者没有任何关联。点击父组件的「Create」按钮触发的是父组件的状态变更,完全不会影响子组件Modal的显隐,同时DialogModal中还多渲染了一个不需要的「Open Modal」按钮。 - 父组件JSX语法错误
你提供的父组件代码中,return块内的<Box as="section">、<Box ml={{ base: 0, md: 60 }}>等标签都没有对应的闭合标签,JSX语法错误也会导致页面渲染失败白屏。
修复方案
- 修复
DialogModal组件:
- 删除不存在的
Lorem组件导入和使用,替换为实际业务内容 - 移除内部的
useDisclosure和多余的Open按钮,改为通过props接收父组件传递的控制状态
修改后的DialogModal代码参考:
import React from 'react'; import { Modal, ModalOverlay, ModalContent, ModalHeader, ModalFooter, ModalBody, ModalCloseButton, Button, } from "@chakra-ui/react" const DialogModal = ({isOpen, onClose}) => { return ( <Modal isOpen={isOpen} onClose={onClose}> <ModalOverlay /> <ModalContent> <ModalHeader>Modal Title</ModalHeader> <ModalCloseButton /> <ModalBody> 这里替换为实际的弹窗内容 </ModalBody> <ModalFooter> <Button colorScheme="blue" mr={3} onClick={onClose}> 关闭 </Button> <Button variant="ghost">确认操作</Button> </ModalFooter> </ModalContent> </Modal> ) } export default DialogModal;
- 调整父组件调用逻辑:
将父组件的状态传递给DialogModal,修改调用代码为:
<DialogModal isOpen={isOpen} onClose={onClose} />
- 补全父组件JSX中所有未闭合的标签,保证语法符合规范。
内容的提问来源于stack exchange,提问作者Keshav Mishra
相关产品推荐
相关产品推荐

