Pas*_*han 5 modal-dialog chakra reactjs chakra-ui
我正在使用 chakra ui,我想在一个组件中使用两个模态。
const { isOpen , onOpen, onClose } = useDisclosure()
<Button colorScheme="teal" size="xs" mr='2' onClick={onOpen} >
Edit
</Button>
{/* Edit modal */}
<Modal isOpen={isOpen} onClose={onClose}>
<ModalOverlay />
<ModalContent>
<ModalHeader>Edit Modal</ModalHeader>
<ModalCloseButton />
<ModalBody>
Edit Modal
</ModalBody>
<ModalFooter>
<Button variant="ghost" mr={3} onClick={onClose}>Cancel</Button>
<Button colorScheme="red" onClick={()=>{deleteAddress(address.id)}}>
Delete
</Button>
</ModalFooter>
</ModalContent>
</Modal>
{/* Delete Address */}
<Button colorScheme="red" size="xs" onClick={onOpen}>
Delete
</Button>
<Modal isOpen={isOpen} onClose={onClose}>
<ModalOverlay />
<ModalContent>
<ModalHeader>Delete Shipping Address</ModalHeader>
<ModalCloseButton />
<ModalBody>
Are you sure you want to delete the shipping address?
</ModalBody>
<ModalFooter>
<Button variant="ghost" mr={3} onClick={onClose}>Cancel</Button>
<Button colorScheme="red" onClick={()=>{deleteAddress(address.id)}}>
Delete
</Button>
</ModalFooter>
</ModalContent>
</Modal>
Run Code Online (Sandbox Code Playgroud)
isOpen , onOpen, onClose 不能作为变量更改,因为它们是内置的脉轮函数。有人可以建议我一种方法来改变其中两个模态(Chakra UI)操作吗?
小智 32
isOpen您只需更改变量的名称onOpen即可onClose
:
const { isOpen: isEditOpen , onOpen: onEditOpen, onClose: onEditClose } = useDisclosure()
const { isOpen: isDeleteOpen , onOpen: onDeleteOpen, onClose: onDeleteClose } = useDisclosure()
{/* Edit Button*/}
<Button colorScheme="teal" size="xs" mr='2' onClick={onEditOpen} >
Edit
</Button>
{/* Edit Modal */}
<Modal isOpen={isEditOpen} onClose={onEditClose}>
<ModalOverlay />
<ModalContent>
<ModalHeader>Edit Modal</ModalHeader>
<ModalCloseButton />
<ModalBody>
Edit Modal
</ModalBody>
<ModalFooter>
<Button variant="ghost" mr={3} onClick={onEditClose}>Cancel</Button>
<Button colorScheme="red" onClick={()=>{deleteAddress(address.id)}}>
Delete
</Button>
</ModalFooter>
</ModalContent>
</Modal>
{/* Delete Button*/}
<Button colorScheme="red" size="xs" onClick={onDeleteOpen}>
Delete
</Button>
{/* Delete Modal*/}
<Modal isOpen={isDeleteOpen} onClose={onSecondModalClose}>
<ModalOverlay />
<ModalContent>
<ModalHeader>Delete Shipping Address</ModalHeader>
<ModalCloseButton />
<ModalBody>
Are you sure you want to delete the shipping address?
</ModalBody>
<ModalFooter>
<Button variant="ghost" mr={3} onClick={onDeleteClose}>Cancel</Button>
<Button colorScheme="red" onClick={()=>{deleteAddress(address.id)}}>
Delete
</Button>
</ModalFooter>
</ModalContent>
</Modal>
Run Code Online (Sandbox Code Playgroud)
再举一个例子:
第一个模态:
const { isOpen: isFirstModalOpen , onOpen: onFirstModalOpen, onClose: onFirstModalClose } = useDisclosure()
Run Code Online (Sandbox Code Playgroud)
第二个模态:
const { isOpen: isSecondModalOpen , onOpen: onSecondModalOpen, onClose: onSecondModalClose } = useDisclosure()
Run Code Online (Sandbox Code Playgroud)
现在这些变量具有不同的值,因此您可以在任何地方使用新名称!
您可以创建一个使用useDisclosure. 然后,您可以拥有此自定义模态组件的多个实例,而模态组件不会共享相同的状态:
const CustomModal = ({ showModalButtonText, modalHeader, modalBody }) => {
const { isOpen, onOpen, onClose } = useDisclosure();
return (
<>
<Button colorScheme="red" size="xs" onClick={onOpen}>
{showModalButtonText}
</Button>
<Modal isOpen={isOpen} onClose={onClose}>
<ModalOverlay />
<ModalContent>
<ModalHeader>{modalHeader}</ModalHeader>
<ModalCloseButton />
<ModalBody>{modalBody}</ModalBody>
<ModalFooter>
<Button variant="ghost" mr={3} onClick={onClose}>
Cancel
</Button>
<Button
colorScheme="red"
onClick={() => {
alert(1);
}}
>
Delete
</Button>
</ModalFooter>
</ModalContent>
</Modal>
</>
);
};
export default function App() {
return (
<div className="App">
<CustomModal
showModalButtonText="Edit"
modalHeader="Edit Modal"
modalBody="Edit Modal"
/>
<CustomModal
showModalButtonText="Delete"
modalHeader="Delete Shipping Address"
modalBody="Are you sure you want to delete the shipping address?"
/>
</div>
);
}
Run Code Online (Sandbox Code Playgroud)
这样,每个 的实例都会CustomModal跟踪自己的isOpen,onOpen和onClose状态。
由于在您的问题中唯一的动态部分是用于打开的按钮、模态、标题文本和模态正文文本,因此我制作了道具,因此可以为每个实例单独设置这些道具。如果更多部分需要动态,您可以根据需要添加道具。
我已经将一些小东西更改为模态以使其更易于测试。
| 归档时间: |
|
| 查看次数: |
2201 次 |
| 最近记录: |