我正在try 在ReactJs中呈现一个HTML对话框元素.我的印象是,它会在我的内容之上呈现.在我的用例中,我有一个图片库,当用户单击一张照片时,我希望弹出一个modal.

import './Project.css'
export default function Project({title, thumbnail_url, images, id}){
    function toggleModal(id){
        const modal = document.getElementById(id);
        const isOpen = modal?.open;
        if (isOpen){
            modal.close()
        }
        else modal.showModal()
    }
    return(
        <>
        <div className="project" onClick={()=>toggleModal(id)}>
            <h2 className='headline project-title'>{title}</h2>
            <img src={thumbnail_url} alt="" />
            <dialog className='modal' id={id} >
            <div>Dialoge</div>
            <button onClick={()=>toggleModal(id)}>close</button>
            </dialog>
        </div>
        
    </>

我希望对话框元素像模式一样呈现在我的图片库上方,但它呈现在页面内容的其余部分之下.我是否需要使用ReactJa门户进行HTML对话?

推荐答案

事实上,ReactJs并不是VanillaJs Dom在操纵.您必须使用useState,并将state更改为切换.因为第一次加载在VDOM中发生了一次,然后ReactDOM确实将VDOM综合到了主DOM.

现在,对于任何更改,都应该进行一些重新渲染.在这里,使用useState是可能的.

另外,在VDOM/DOM中 Select 元素时,强烈建议使用useRef.

import './Project.css';
import { useState, useRef } from 'react';

export default function Project({title, thumbnail_url, images, id}){
    const [isOpen, setOpenClose] = useState(false);
    const dialogRef = useRef();

    function toggleModal(){
        if (isOpen){
            setOpenClose(false);
            dialogRef.current?.close();
        }
        else {
            setOpenClose(true);
            dialogRef.current?.showModal();
        }
    }
    return(
        <>
        <div className="project" onClick={()=>toggleModal(id)}>
            <h2 className='headline project-title'>{title}</h2>
            <img src={thumbnail_url} alt="" />
            <dialog className="modal" ref={dialogRef} >
              <div>Dialoge</div>
              <button onClick={()=>toggleModal(id)}>close</button>
            </dialog>
        </div>
        
    </>

Html相关问答推荐

传单自定义标记(divIcon)html/css不适用

如何使用css实现悬停时的动画zoom ?

如何使我的组织 struct 图的连接线响应?

首字下沉非字母字符

在iOS中调整HTML邮箱内容的大小

如何在伪元素背景中定位多个CSS径向梯度

图像不在HTML文件中显示

这<;td&>如何溢出<;表>;?

Swift WkMessageHandler 消息不发送

带标签 css 的 div 内的中心图标

从 Vue 应用程序的容器元素渲染 HTML

显示填充正方形的图形的简单页面的 HTML 代码

为什么 text-align 应用于 span 而不是 CSS 中的 img

如何根据行中的其中一列将行居中?

如何在没有容器的情况下沿基线将 div 中的元素居中?

在 SQL 中合并 HTML 表中的单元格

如何将 img 元素定位到特定位置?

让 Bootstrap 5 模式和背景占据父容器的宽度和高度,而不是全屏

那里有一个类似于 ?

如何计算没有根元素的先前 html 标记(lxml python3)编辑:还获取元素