gpt4 book ai didi

reactjs - Chakra UI 在单个组件中使用多个模型

转载 作者:行者123 更新时间:2023-12-03 21:07:06 26 4
gpt4 key购买 nike

我正在使用 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>
isOpen , onOpen, onClose 不能作为变量更改,因为它们是内置的脉轮函数。
有人可以建议我一种方法来改变其中两个模态(Chakra UI)操作吗?

最佳答案

您可以创建一个使用 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>
);
}
这样 CustomModal 的每个实例都会跟踪自己的 isOpenonOpenonClose 状态。
由于在您的问题中唯一的动态部分是打开按钮、模态、标题文本和模态正文文本,因此我制作了 Prop ,因此可以为每个实例单独设置这些。如果更多部分需要动态,您可以根据需要添加 Prop 。
我已经将一些小东西更改为模态以使其更易于测试。

关于reactjs - Chakra UI 在单个组件中使用多个模型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65988633/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com