【问题标题】:How can I get navigation to stay appeared on desktop? (ReactJS)如何让导航保持显示在桌面上? (反应JS)
【发布时间】:2019-12-18 15:23:17
【问题描述】:

我创建了一个移动菜单,每次我在桌面上显示导航时它都会消失。我正在使用与为导航链接之一创建下拉列表相同的 JS 效果。我不希望导航在每次单击时消失。

如何让导航出现在桌面屏幕上?

View GIF Link

以下代码:

import React from 'react';
import { Link } from 'react-router-dom';
import Dropdown from '../dropdowns/dropdown.js';
import hamburger from "../images/menu.svg";

class MobileDropdown extends React.Component {

constructor(){
 super();

 this.state = {
       displayMenu: false,
};

  this.showDropdownMenu = this.showDropdownMenu.bind(this);
  this.hideDropdownMenu = this.hideDropdownMenu.bind(this);

};

  showDropdownMenu(event) {
        event.preventDefault();
        this.setState({ displayMenu: true }, () => {
        document.addEventListener('click', this.hideDropdownMenu);
    });
  }

  hideDropdownMenu() {
      this.setState({ displayMenu: false }, () => {
      document.removeEventListener('click', this.hideDropdownMenu);
    });

  }


render() {
    return (
        <div className="FlexContainer NavbarContainer">

                <div className="mobilecontainer LeftNav">
                    <h2 className="BrandName LeftNav mobileboxmenu inline">Kommonplaces</h2>
                    <div className="hamburger inline" onClick={this.showDropdownMenu}><img alt="menubtn" src={hamburger}></img></div>
                </div>
                { this.state.displayMenu ? (

                <> 
                  <ul className="NavBar">
                    <Dropdown/>    
                    <li className="RightNav"><Link to="/">Host Your Space</Link></li>
                    <li className="RightNav"><Link to="/">About Us</Link></li>
                    <li className="RightNav"><Link to="/">Contact Us</Link></li>
                    <li className="RightNav"><Link to="/">Sign Up</Link></li>
                    <li className="RightNav"><Link to="/">Login</Link></li>
                  </ul>
                </>

                ):
              (
            null
          )
        }
       </div>

    );
  }
}

export default MobileDropdown;

【问题讨论】:

    标签: javascript reactjs


    【解决方案1】:

    这是因为你在showDropdownMenu 方法中有这一行:

    document.addEventListener('click', this.hideDropdownMenu)
    

    您似乎想要这样,因此您可以在移动断点中切换菜单的打开和关闭状态。

    但问题是,当您转到桌面大小时,虽然您隐藏了按钮,但组件及其点击处理程序仍在 DOM 中。所以当你点击菜单项时就会消失。

    相对于您的问题和 React 作为一个整体,我会考虑不要像在 vanilla JS 中那样添加事件侦听器,而是使用 React 的 setState 切换打开关闭,就像 this.state.displayMenu = !this.state.displayMenu 这样将切换状态的真/假值对象。

    虽然我会在更大的层面上研究您如何组织组件。如果您有一个移动菜单组件,我会考虑拥有一个桌面菜单组件,并根据您是否处于移动断点有条件地渲染每个组件。

    【讨论】:

    • 你有什么资源可以让我看看吗
    • @bpdg 当然,我认为 React 文档是一个很好的起点。不要害怕制造更小的组件。一种用于具有点击处理程序及其布局的移动菜单,另一种用于具有布局的桌面菜单。在您的父组件中,根据您是否处于移动状态,在两个组件之间切换。 reactjs.org/docs/handling-events.html(切换示例)reactjs.org/docs/conditional-rendering.html
    • 我只是想知道我需要从哪里开始,我要重做所有事情
    • @bpdg 查看这个答案。我将从这里开始,因为它为您提供了检查您是否在移动设备上并有条件地呈现您的组件的模式stackoverflow.com/questions/41478875/… 然后我会参考有关事件处理的反应文档来处理您的移动桌面菜单的切换。
    • 但不会与移动或桌面不同,只是在移动中相互堆叠。
    猜你喜欢
    • 2020-11-28
    • 2022-08-23
    • 1970-01-01
    • 2018-01-02
    • 2011-05-18
    • 1970-01-01
    • 2020-08-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多