当前位置: 首页 > 知识库问答 >
问题:

如何在reactjs中应用classList.toggle("active ")

庄嘉
2023-03-14

我创建了两个按钮,并给onClick函数togglePopup并在顶部定义它。但是我很困惑如何应用document.getElementById('popup-1')。classList.toggle("active")在反应中。我在javaScript中应用了这个方法,我不知道它是如何在反应中工作的?

弹出式

const Filter = () => {
    const togglePopup = () => {
    document.getElementById('popup-1').classList.toggle("active")
    }
    return (
        <>
<button className='p-3 border bg-blue-400'>click</button>
            <div className="popup" id="popup-1">
                <div className="overlay"></div>
                <div className="content">
                    <div className="close-btn" onClick={togglePopup}>&times;</div>
                    <h1 className='text-2xl font-bold'>title</h1>
                    <p>Lorem ipsum dolor, sit amet consectetur adipisicing elit. Non debitis officia neque nostrum, perspiciatis sed quaerat veritatis numquam, explicabo dolorum aliquam illo dolor at nemo maxime consequatur facilis magni laudantium! Ipsa eveniet quam, illum quos laudantium a placeat temporibus dolores libero pariatur quibusdam atque impedit magnam nam ipsum, rerum sapiente?</p>
                </div>
            </div>

弹出窗口.css

.popup .overlay{
    position: fixed;
    top: 0px;
    left: 0px;
    width: 100vw;
    height: 100vh;
    background:rgba(0, 0, 0, 0.7);
    z-index: 1;
    display: none;
}
.popup .content {
    position: absolute;
    top: 50%;
    left: 50%;
    transform: translate(-50%, -50%) scale(0);
    background: #fff;
    width: 450px;
    height: fit-content;
    z-index: 2;
    text-align: center;
    padding: 20px;
    box-sizing: border-box;
}

.popup .close-btn{
    position: absolute;
    right: 20px;
    top: 20px;
    width: 30px;
    height: 30px;
    background: #222;
    color: #fff;
    font-size: 25px;
    font-weight: 600;
    line-height:30px;
    text-align:center;
    border-radius: 50%;
    cursor: pointer;
}

.popup:active .overlay{
    display: block;
}
.popup:active .content{
    transition: all 300ms ease-in-out;
    transform: translate(-50%, -50%) scale(1);

}

共有1个答案

颛孙安康
2023-03-14

您不应该从React查询或操作DOM。如果您想切换一个类,请让您的按钮更新组件的状态,然后根据该状态呈现标记。

function MyComponent () {
  const [active, setActive] = useState(false);

  return (
    <div className={active ? 'active' : ''}>
      <button onClick={() => setActive(!active)}>Toggle</button>
    </div>
  )

}
 类似资料:
  • 问题内容: 我是ReactJS的新手。以前,我使用jQuery设置所需的任何动画或功能。但是现在我正在尝试使用ReactJS并最小化jQuery的使用。 我的情况是: 我正在尝试使用ReactJS构建手风琴。 使用JQuery : 我的问题: 我该如何使用ReactJS? 问题答案: 您应该尝试避免在ReactJS中使用jQuery。但是,如果您真的想使用它,则可以将其放入组件的component

  • 问题内容: 我想阻止点击事件起泡。因此,我在代码中添加了e.stopPropagation()。我总是在控制台中看到一个错误,那就是: 在reactjs中设置stopPropagation的正确方法是什么? 问题答案: 正确的方法是使用, 您的事件处理程序将传递SyntheticEvent实例,该实例是围绕浏览器本地事件的跨浏览器包装器。它具有与浏览器本机事件相同的接口,包括stopPropaga

  • 除了使用DangerouslySetInnerHTML之外,还有其他的方法吗? 谢谢!

  • 问题内容: 我是reactjs的新手,我想在我的react应用程序中包含引导程序 我已经安装了引导程序 现在,要在我的react应用程序中加载bootstrap css和js。 我正在使用webpack。 webpack.config.js 我的问题是“如何在node_modules的reactjs应用程序中包含引导CSS和js?” 如何设置引导程序以包含在我的React应用程序中? 问题答案:

  • 问题内容: 我想在自己的内部加载Google API客户端库,并且会在单独的javascript文件中调用方法。然后,该方法将输出到控制台。 客户端库已加载,没有任何问题,但消息未从控制台打印出来,我认为这是因为根本没有调用该方法。 这是我的: 这是包含方法的javascript文件: 如果这是纯JavaScript,则该方法将如下所示: es6中是否有任何与对象相似的东西。 问题答案: 组件方法

  • 问题内容: 从官方教程中: 在卸载和销毁组件之前立即调用。使用此方法执行任何必要的清除,例如使计时器无效,取消网络请求或清除在其中创建的所有DOM元素。 我了解“使计时器无效”。可以用终止。但是我不理解“清理在中创建的任何DOM元素”,我可以看到这种情况的示例吗? 问题答案: 如果网络请求发送库支持中止正在进行的网络请求调用,则绝对可以在方法中调用该请求。 但是,与清理元素有关。根据目前的经验,我