javascript - React 响应式导航栏和汉堡菜单

标签 javascript reactjs

我需要让 React 响应式导航栏。我发现一些在 HTML 中有效,但在 React 中无效。我认为问题出在 getElementById 中,因为 React 不支持它。

import React from "react";
import { Link } from "react-router-dom";
import "./index.css";

function myFunction() {
  var x = document.getElementById("myTopnav");
  if (x.className === "topnav") {
    x.className += " responsive";
  } else {
    x.className = "topnav";
  }
}
function Header() {
  return (
    <nav>
      <div className="topnav" id="myTopnav">
        <a href="#home" className="active">
          Home
        </a>
        <a href="#news">News</a>
        <a href="#contact">Contact</a>
        <a href="#about">About</a>
        <a href="javascript:void(0);" className="icon" onclick={myFunction}>
          <i className="fa fa-bars"></i>
        </a>
      </div>
    </nav>
  );
}

export default Header;

这是我的项目正在使用的 CSS:

.topnav {
  overflow: hidden;
  background-color: black;
}

.topnav a {
  float: left;
  display: block;
  color: #f2f2f2;
  text-align: center;
  padding: 14px 16px;
  text-decoration: none;
  font-size: 17px;
}

.topnav a:hover {
  background-color: #ddd;
  color: black;
}

.topnav .icon {
  display: none;
}

@media screen and (max-width: 600px) {
  .topnav a {
    display: none;
  }
  .topnav a.icon {
    float: right;
    display: block;
  }
}

@media screen and (max-width: 600px) {
  .topnav.responsive {
    position: relative;
  }
  .topnav.responsive .icon {
    position: absolute;
    right: 0;
    top: 0;
  }
  .topnav.responsive a {
    float: none;
    display: block;
    text-align: left;
  }
}

我应该如何更新我的 React 代码,以便在单击图标时显示响应式菜单?

最佳答案

已更新

myFunction() 放在 Header() 中,因为这是一个基于函数的组件。

这是 Header 组件更改后的样子:

import React from "react";
import { Link } from "react-router-dom";
import "./index.css";

function Header() {
  const myFunction = () => {
    var x = document.getElementById("myTopnav");
    if (x.className === "topnav") {
      x.className += " responsive";
    } else {
      x.className = "topnav";
    }
  }

  return (
    <nav>
      <div className="topnav" id="myTopnav">
        <a href="#home" className="active">
          Home
        </a>
        <a href="#news">News</a>
        <a href="#contact">Contact</a>
        <a href="#about">About</a>
        <a href="javascript:void(0);" className="icon" onClick={myFunction}>
          <i className="fa fa-bars"></i>
        </a>
      </div>
    </nav>
  );
}

export default Header;

请访问此链接查看:Code Sandbox Live Demo

关于javascript - React 响应式导航栏和汉堡菜单,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66780264/

相关文章:

javascript - 可以通过标签调用全局函数吗?

javascript - 谷歌地图在 PhoneGap 中加载 map 很慢

javascript - 使用 React 重新渲染时 Highcharts Y 轴覆盖

javascript - 使用可重复的 Javascript 函数来验证多个单选按钮组

javascript - 如果服务器上的集合发生更改,如何仅更新主干 View ?

javascript - 从 Observables 计算的 Knockout.js CSS

javascript - React - 使用和加载视频文件

javascript - Redux 双重调度 Action

javascript - React useState 导致渲染循环

javascript - Next.js : Refresh page after modifying a file, 无需重新运行 'npm run'