我正在使用Next.js和NextUI组件库来创建一个可按压的NextUI卡片,点击后,将打开一个NextUI模态。我已经在myCard.js文件中自定义了卡片组件。我已经在myModal.js文件中自定义了所需的模态组件。我将在index.js文件中渲染这两个组件,其中所有其他组件都被渲染。我目前的实现有一个可按压的卡片,但是当点击卡片时,模态不显示。
myCard.js:
const myCard = ({openModal}) =>
*** setup code ***
<Card
className={myCard}
radius="lg"
onPress={openModal}
isPressable
>
*** more code ***
字符串
myModal.js:
const myModal = ({isModalOpen, closeModal}) => {
*** setup code ***
return (
<Modal
isOpen={isModalOpen}
onClose={closeModal}
>
<ModalContent>
{(onClose) => (
<>
*** modal content ***
}
</ModalContent>
</Modal>
);
型
index.js
*** some other code ***
const [isModalOpen, setIsModalOpen] = useState(false);
const openModal = () => {
setIsModalOpen(true);
};
const closeModal = () => {
setIsModalOpen(false);
};
return (
<ListCard openModal={openModal}/>
<DetailCard
isOpen={isModalOpen}
onClose={closeModal}
/>
*** other code ***
)
型
我最好的猜测是,由于我的组件在单独的文件中,状态值没有被正确地传递。(如果我用一个按钮代替myCard,它会像预期的那样工作)。让可按下的Card像打开模态的按钮一样正常工作的最佳方法是什么?
1条答案
按热度按时间vfwfrxfs1#
所以基本上,你想做一张卡片,当点击它时,它会显示一个模态!
对于NextUI文档,您甚至不需要使用任何状态来处理Modal的打开和关闭。
字符串
看第一个例子:https://nextui.org/docs/components/modal#usage
他们提供了一个钩子,可以处理所有这些状态。你只需要在你的
Card
组件上设置它们。Card有isPressable
属性,你传递型
useDisclosure()
钩子处理打开/关闭。下面是我做的一个组件:
*PressableCard.js 导入页面使用 *
型
说明:
“use client”,因为这些组件无法在服务器端呈现,因为它使用事件。请删除“use client”并阅读错误。
我将Card和Modal放在一起,传递这些状态/值和函数
const { isOpen, onOpen, onOpenChange } = useDisclosure();
卡片:
使卡可按下并在其onPress事件上传递函数:
型
Modal:
模态基于以下因素打开/关闭
型
所以Modal的isOpen = isOpen来自useDisclosure。
类似地,来自useDisclosure的Modal的onOpenChange={onOpenChange}。
useDisclosure()
的更多信息,请在代码编辑器中选择useDisclosure()
并按F12
,它将显示它返回的函数和值。console logged isOpen
状态/值,so when you click
卡上你可以see it change in console
.如果有什么我遗漏了,错过了,请留下评论。我会编辑这个答案。