javascript - 模态不显示 Reactjs 使用 Hook

标签 javascript reactjs

我正在使用 React Hook 和 React Portal 来创建和显示模态。这是我的代码

模态.tsx

const modalRoot = document.getElementById('modal');
const Modal: React.FC<Props> = memo(({isOpen, toggle, children}) => {
    const el = document.createElement('div');

    useEffect(() => {
        modalRoot.appendChild(el);

        return (() => {
            modalRoot.removeChild(el);
        })
    });

    return (
        isOpen ? createPortal(
            <React.Fragment>
                <div className="modal fade">
                    <div className="modal-dialog" role="document"
                         style={{width: "700px"}}>
                        {children}
                    </div>
                </div>
            </React.Fragment>, el
        ) : null
    )
});

useModal.tsx

const useModal = () => {
    const [isOpen, setIsShowing] = useState(false);

    const toggle = () => {
        setIsShowing(!isOpen);
    };

    return [
        isOpen,
        toggle,
    ]
};

使用

const [isModalOpen, toggleModal] = useModal();
    <Modal isOpen={isModalOpen} toggle={toggleModal}>
        <h1>test</h1>
        <p>Other text that describes what is happening</p>
        <button onClick={() => toggleModal(false)}>toggle</button>
    </Modal>

                        <div className="col-lg-2 pull-right">
                            <div className="pull-right">
                                <button type="button"
                                    // @ts-ignore
                                        onClick={() => toggleModal(!isModalOpen)}
                                        className="btn btn-primary btn-outline"><i
                                    className="ti-plus"/>
                                </button>
                            </div>
                        </div>

但是当我点击这个按钮时。它没有显示我的模态。当我按 f12 并检查 dom.我看到模态呈现。请帮助我

最佳答案

我尝试在 Codesandbox 上运行您的代码,它对我来说工作正常。这是链接:https://codesandbox.io/s/sharp-dust-oyz0c

虽然我怀疑您可能因为样式而看不到模态。 注意 模态在 className 中有 fade。尝试检查样式或创建包含所有必要样式的代码和框,以便于调试。

希望这对您有所帮助!

关于javascript - 模态不显示 Reactjs 使用 Hook ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59483722/

相关文章:

javascript - npm run build 时显示错误

reactjs - 为什么我的 React 组件总是显示相同的状态?

javascript - 发送密码的散列而不是未散列的密码是个坏主意吗?

javascript - PHP - 获取数据时 Ajax 自动刷新页面

javascript - 如何使用react获取动态创建的输入字段的值

javascript - React JSX 元素不继承 'id' 样式属性

javascript - 有没有使用模板文字在 return 中渲染 react 组件?

Ajax 调用后不会触发 Javascript 事件

javascript - 将选择限制为 handsontable 中的整行/列

javascript - swift/WebKit : Updating HTML in WKWebView with Javascript