我已经建立了几个弹窗作为React函数组件。它们通过与弹窗关联的上下文中的isModalOpen
布尔属性显示/隐藏。这很好用。
现在,由于种种原因,我的同事需要我重构这段代码并在更高层次上控制弹窗的可见性。以下是一些示例代码:
import React, { useState } from 'react';
import Button from 'react-bootstrap/Button';
import { UsersProvider } from '../../../contexts/UsersContext';
import AddUsers from './AddUsers';
const AddUsersLauncher = () => {
const [showModal, setShowModal] = useState(false);
return (
<div>
<UsersProvider>
<Button onClick={() => setShowModal(true)}>Add Users</Button>
{showModal && <AddUsers />}
</UsersProvider>
</div>
);
};
export default AddUsersLauncher;
这一开始都很顺利。按钮被渲染出来,当按下按钮时模态框就会显示。
问题在于如何隐藏它。之前我只是在 reducer 中将 isModalOpen
设置为 false。
今天早些时候我与同事简短交谈时,他说上面的代码会起作用,我不需要传递任何东西到 AddUsers
中。不过我认为我需要将 setShowModal
函数传递到组件中,因为这样可以调用它来隐藏模态框。
但我也可能没有看到更简单的方法。有可能有吗?
<AddUsers />
,就可以从子组件中关闭它。我无法找到这样做的方法,这就是为什么我发布了这个问题。 - robertwerner_sf