代码之家  ›  专栏  ›  技术社区  ›  thomasna82

如果在React中单击链接,SlideMenu将不会关闭

  •  1
  • thomasna82  · 技术社区  · 7 年前

    我有一个非画布菜单,当 isOpen 已切换为true。问题是它不会在 Link 单击转到其他页面。页面会加载,但移动画布外菜单会完全填满屏幕。

    Header.js

    class HeaderContainer extends Component {
      state = { isMobile: false }
    
    
      componentDidMount() {
        this.updateHeader();
        window.addEventListener('resize', this.updateHeader);
      }
    
      componentWillUnMount() {
        window.removeEventListener('resize', this.updateHeader);
      }
    
      updateHeader = () => {
        this.setState({ isMobile: window.innerWidth < 960 });
      }
    
      render() {
        const { isMobile } = this.state;
        return (
          <header>
            { isMobile  ? <MobileNav/> : <DesktopNav/> }
          </header>
        );
      }
    }
    

    MobileNav.js

    class MobileNav extends Component {
      state = { isOpen: false  }
    
      toggleMenu = (event) => {
        event.preventDefault();
        this.setState({ isOpen: !this.state.isOpen });
      }
    
      render() {
        const { isOpen } = this.state;
        return (
          <div>
            <MenuButton 
              toggleMenu={this.toggleMenu}
              isOpen={isOpen}/>
            <SlideMenu isOpen={isOpen}/>
          </div>
        );
      }
    }
    
    export default MobileNav;
    

    SlideMenu.js

    const SlideMenu = (props) => {
    
    
    return (
        <Menu isOpen={props.isOpen}>
          <Nav>
            <StyledLink  exact to="/" activeClassName="selected">Home</StyledLink>
            <StyledLink to="/about" activeClassName="selected">About</StyledLink>
            <StyledLink to="/contact" activeClassName="selected">Contact</StyledLink>
          </Nav>
        </Menu>
      );
    }
    

    这是我所说内容的截图。
    enter image description here

    2 回复  |  直到 7 年前
        1
  •  1
  •   Uchit Kumar    7 年前

    slideMenu 没有可切换的功能 isOpen 状态单击“打开” styledlink .. this.props.toggleMenu 应调用和 event.ptreventDefault() 应从toglemenu中删除

    如评论中所述,这将起作用。

        2
  •  0
  •   mitch    7 年前

    使用prevState代替state this.setState(prevState => {isOpen => !prevState.isOpen})