我正在try 使用react-scroll在我的投资组合应用程序上实现导航,它工作得很好,直到屏幕宽度改变和下拉菜单出现,因为我的所有组件都呈现在同一页面上.当我有多页面应用程序时,实现react-router是相当容易的,但这一个真的让我着迷.

import { useRef } from "react";
import { FontAwesomeIcon } from '@fortawesome/react-fontawesome';
import React from 'react';
import { faBars, faCircleXmark } from '@fortawesome/free-solid-svg-icons';
import "./Navbar.css";
import {Link} from 'react-scroll';

function Navbar() {
    const navRef = useRef();

    const showNavbar = () => {
        navRef.current.classList.toggle(
            "responsive_nav"
        );
    };

    return (
        <header>
            <nav ref={navRef}>  
                <Link to="home" spy={true} smooth={true} offset={-100} duration={500}>Home</Link>
                <Link to="about" spy={true} smooth={true} offset={-100} duration={500}>About me</Link>
                <Link to="mywork" spy={true} smooth={true} offset={-100} duration={500}>My Work</Link>
                <Link to="contact" spy={true} smooth={true} offset={-150} duration={500}>Contact</Link>
                <button
                    className="nav-btn nav-close-btn"
                    onClick={showNavbar}>
                    <FontAwesomeIcon icon={faCircleXmark} style={{color: "#FFB30D",}} />
                </button>
            </nav>
            <button
                className="nav-btn nav-open"
                onClick={showNavbar}>
                <FontAwesomeIcon icon={faBars} style={{color: "#FFB30D",}}/>
            </button>
        </header>
    );
}

export default Navbar;
import './App.css'
import React from 'react';
import Navbar from "./Components/Navbar.jsx";
import Home from "./Components/Home.jsx";
import AboutMe from "./Components/AboutMe.jsx";
import MyWork from './Components/MyWork.jsx';
import Footer from './Components/Footer.jsx';
import { BrowserRouter } from 'react-router-dom';

function App() {
  return (
    <BrowserRouter>
      <Navbar />
      <Home />
      <AboutMe />
      <MyWork />
      <Footer />
    </BrowserRouter> 
  );
}

export default App

一旦我点击链接菜单中的链接,它确实滚动到所选的部分,但链接菜单并没有消失.

推荐答案

一旦我点击链接菜单中的链接,它就会滚动到 Select 的部分,但菜单并没有消失.

向链接添加一个调用showNavbaronClick处理程序,这样当它们被单击以滚动到特定部分时,它们也可以关闭菜单.我还建议将showNavbar重新命名为更准确的名称,比如toggleNavbar,因为它确实是这样做的.

function Navbar() {
  const navRef = useRef();

  const toggleNavbar = () => {
    navRef.current.classList.toggle(
      "responsive_nav"
    );
  };

  const linkProps = {
    onClick: toggleNavbar, // <-- add onClick handler
    spy: true,
    smooth: true,
    offset: -100,
    duration: 500,
  };

  return (
    <header>
      <nav ref={navRef}>  
        <Link to="home" {...linkProps}>Home</Link>
        <Link to="about" {...linkProps}>About me</Link>
        <Link to="mywork" {...linkProps}>My Work</Link>
        <Link to="contact" {...linkProps}>Contact</Link>
        <button
          className="nav-btn nav-close-btn"
          onClick={toggleNavbar}
        >
          <FontAwesomeIcon icon={faCircleXmark} style={{ color: "#FFB30D" }} 
 />
        </button>
      </nav>
      <button
        className="nav-btn nav-open"
        onClick={toggleNavbar}
      >
        <FontAwesomeIcon icon={faBars} style={{ color: "#FFB30D" }} />
      </button>
    </header>
  );
}

Javascript相关问答推荐

禁用从vue.js 2中的循环创建的表的最后td的按钮

使用JavaScript在ionic Web应用程序中更新.pane和.view的背景 colored颜色

单击子元素时关闭父元素(JS)

Angular:动画不启动

加载背景图像时同步旋转不显示的问题

如何避免页面第一次加载时由于CSS样式通过JavaScript更改而出现闪烁

我怎么才能得到Kotlin的密文?

在执行异步导入之前判断模块是否已导入()

这个值总是返回未定义的-Reaction

在使用REACT更改了CSS类之后,无法更改CSS样式

Reaction Redux&Quot;在派单错误中检测到状态Mutations

以编程方式聚焦的链接将被聚焦,但样式不适用

将对象推送到数组会导致复制

将相关数据组合到两个不同的数组中

Django导入问题,无法导入我的应用程序,但我已在设置中安装了它

ReactJS在类组件中更新上下文

使用jQuery每隔几秒钟突出显示列表中的不同单词

浮动标签效果移除时,所需的也被移除

JS/css:将数字输入的S函数和可调整大小的元素S函数绑定在一起

在ReactJS上挂载组件时获得多个身份验证请求