javascript - 我在 React 中触发这个类列表切换时遇到问题
问题描述
我试图在 React 中触发这个 CSS 打开教程是在 HTML 中,但我不能使用 addeventlistner 或使用 document.queryselector 所以我向汉堡包添加了一个 onClick 事件,它应该处理这两个问题,现在我只需要切换这个类。请不要将此标记为已回答,因为已回答的问题与 jquery 和常规 html 相关。
零件:
const Navbar = props => {
const hamburger = document.querySelector('.hamburger');
const navLinks = document.querySelector('.nav-links');
const links = document.querySelectorAll('nav-links li');
// hamburger.addEventListener('click', () => {
// navLinks.classList.toggle("open")
// });
useEffect(() => {
}, []);
return (
<div>
<nav>
<div onCLick={//I want to toggle the open class on click} className="hamburger">
<div className="line"></div>
<div className="line"></div>
<div className="line"></div>
</div>
<ul className="nav-links">
<li className="nav-links">About</li>
<li className="nav-links">About</li>
<li className="nav-links">About</li>
</ul>
</nav>
</div>
);
};
export default Navbar;
CSS:
nav{
height: 10vh;
background: blue !important;
}
.nav-links{
display: flex;
list-style: none;
width: 50%;
height: 100%;
justify-content: space-around;
align-items: center;
margin-left: auto;
}
/* change to classes */
.nav-links li a{
color: white;
text-decoration: none;
font-size: 16px
}
.landing{
height: 90vh;
display: flex;
justify-content: center;
align-items: center;
}
.landing h1{
margin: 100px;
font-size: 50px;
}
@media screen and (max-width: 768px){
.nav-links{
position: fixed;
background: red;
height: 100vh;
width: 100%;
flex-direction: column;
display: none;
clip-path: circle(100px at 90% 10%);
-webkit-clip-path: circle(100px at 90% 10%);
z-index: 99999;
transition: all 1s ease-out
}
.nav-links.open{
clip-path: circle(1000px at 90% 10%);
-webkit-clip-path: circle(1000px at 90% 10%);
}
.line{
width: 30px;
height: 3px;
background: white;
margin: 5px
}
nav{
position: relative
}
.hamburger{
position: absolute;
cursor: pointer;
right: 5%;
top: 50%;
transform: translate(-5%,-50%)
}
}
解决方案
你应该使用state
React 的方式来帮助你跟踪组件的当前状态(比如当你的汉堡被点击时)。React 背后的核心概念之一是为 JSX 定义事件侦听器。因此,当用户与您的应用程序交互时,会触发一个事件,因此state
您的组件会发生变化。
我们state
用来帮助构建您想要的功能。在这种情况下,单击汉堡包会切换open state
,因此我们使用该state
布尔值来帮助我们切换导航链接列表的类。
无需DOM
像使用普通 JavaScript 中的典型文档选择器那样强制交互。
查看工作沙箱:https ://codesandbox.io/s/cool-wildflower-94e6q
import React, { useState, useEffect } from "react";
import ReactDOM from "react-dom";
import "./styles.css";
const Navbar = props => {
const [open, setOpen] = useState(false);
return (
<div>
<nav>
<div onClick={() => setOpen(!open)} className="hamburger">
<div className="line" />
<div className="line" />
<div className="line" />
</div>
<ul className={open ? "nav-links" : "hide"}>
<li className="nav-links">About</li>
<li className="nav-links">About</li>
<li className="nav-links">About</li>
</ul>
</nav>
</div>
);
};
export default Navbar;
const rootElement = document.getElementById("root");
ReactDOM.render(<Navbar />, rootElement);
推荐阅读
- python - 防止函数连续调用两次
- android - RecycleView 排序
- php - 无法在 laravel 配置文件中编写函数
- java - 使用递归查找斐波那契数列中的数字 - 如何使其更快?
- typescript - TypeScript 中的类型正在发生变化
- r - scales_fill_continuous 不起作用(ggplot2)
- ruby - 超时后结束WEBrick服务器进程的正确方法是什么?
- windows - 通过 Zip 文件安装 Octave
- ssrs-2017 - SSRS 使用配置管理器设置目标报告路径
- regular-language - 正则语言的最小抽吸长度