【发布时间】:2019-07-12 13:53:57
【问题描述】:
我正在学习使用 css、html 和 javascript 创建动画导航栏和汉堡包的教程,我想创建导航栏作为我项目的反应组件。
我试图隐藏的代码如下,它是一个 app.js 文件,它嵌入在带有标签的 html 中:
const navSlide = () => {
const burger = document.querySelector('.burger');
const nav = document.querySelector('.nav-links');
burger.addEventListener('click', () => {
nav.classList.toggle('nav-active');
})
}
navSlide();
我已尝试将此代码实现到我的导航栏反应组件中,如下所示:
import React from "react";
const NavBar = () => {
const nav = document.querySelector(".nav-links");
return (
<div className="navbar">
<nav>
<ul className="nav-links">
<li>
<a href="#">Menu Item</a>
</li>
</ul>
<div
className="burger"
onClick={() => {
nav.classList.toggle("nav-active");
}}
>
<div className="line1" />
<div className="line2" />
<div className="line3" />
</div>
</nav>
</div>
);
};
export default NavBar;
但是,这会返回以下错误: "TypeError: 无法读取属性 'classList' of null"
.nav-active的CSS如下:
.nav-active {
transform: translateX(0%);
}
我期望的结果是导航栏在单击汉堡符号时切换打开和关闭
【问题讨论】:
-
我猜你的导航栏需要一个状态,然后在点击处理程序中更新它:setState({isActive:true})
-
如果需要指向 dom 元素,不要使用 selectors,而是使用 refs。请注意,如果您“认为” react 也 refs 使用将非常罕见
标签: javascript html css reactjs hamburger-menu