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

React中的滑动菜单不工作?

  •  2
  • emeeery  · 技术社区  · 7 年前

    遵循 tutorial 但显然没有按应有的方式工作,按下按钮应该会在右侧显示菜单,但它是这样显示的,怎么了?

    MenuContainer类将其更改为提要栏。js公司

    所有班级都在里面 侧栏。js公司

    import React, { Component } from "react";
    
    class SideBar extends React.Component {
        constructor(props) {
            super(props);
            this.state = { visible: false };
            this.handleMouseDown = this.handleMouseDown.bind(this);
            this.toggleMenu = this.toggleMenu.bind(this);
        }
    
        toggleMenu() {
          this.setState({
              visible: !this.state.visible
          });
        }
    
        handleMouseDown(e) {
            this.toggleMenu();
    
            console.log("clicked");
            e.stopPropagation();
        }
      render() {
        return (
    
        <div>
    
        <MenuButton handleMouseDown={this.handleMouseDown}/>
        <Menu handleMouseDown={this.handleMouseDown} menuVisibility={this.state.visible}/>
          <div>
            <div>
              <p>Can you spot the item that doesn't belong?</p>
              <ul>
                <li>Lorem</li>
                <li>Ipsum</li>
                <li>Dolor</li>
                <li>Sit</li>
                <li>Bumblebees</li>
                <li>Aenean</li>
                <li>Consectetur</li>
              </ul>
            </div>
          </div> 
    
          </div>
        );
      }
    }
    export default SideBar;
    
    class MenuButton extends React.Component {
      render() {
        return (
          <button className="roundButton"
                  onMouseDown={this.props.handleMouseDown}></button>
        );
      }
    }
    
    
    class Menu extends React.Component {
      render() {
        var visibility = "hide";
    
        if (this.props.menuVisibility) {
          visibility = "show";
        }
    
        return (
          <div className="flyoutMenu"
               onMouseDown={this.props.handleMouseDown} 
               className={visibility}>
            <h2><a href="#">Home</a></h2>
            <h2><a href="#">About</a></h2>
            <h2><a href="#">Contact</a></h2>
            <h2><a href="#">Search</a></h2>
          </div>
        );
      }
    }
    

    还有我的 样式。scss公司

    .roundButton {
      background-color: #96D9FF;
      margin-bottom: 20px;
      width: 50px;
      height: 50px;
      border-radius: 50%;
      border: 10px solid #0065A6;
      outline: none;
      transition: all .2s cubic-bezier(0, 1.26, .8, 1.28);
    }
    .roundButton:hover {
      background-color: #96D9FF;
      cursor: pointer;
      border-color: #003557;
      transform: scale(1.2, 1.2);
    }
    
    .roundButton:active {
      border-color: #003557;
      background-color: #FFF;
    }
    
    .flyoutMenu {
      width: 100vw;
      height: 100vh;
      background-color: #FFE600;
      position: fixed;
      top: 0;
      left: 0;
      transition: transform .3s
                  cubic-bezier(0, .52, 0, 1);
      overflow: scroll;
      z-index: 1000;
    }
    
    .flyoutMenu.hide {
      transform: translate3d(-100vw, 0, 0);
    }
    
    .flyoutMenu.show {
      transform: translate3d(0vw, 0, 0);
      overflow: hidden;
    }
    

    这是单击时显示的图像。

    image

    1 回复  |  直到 7 年前
        1
  •  0
  •   weisk    7 年前

    您可以从侧栏组件中修改状态。边栏组件将状态作为道具传递到菜单。当您改变此状态时,它应该使用新值重新呈现菜单组件。

    您的菜单类看起来更像:

    class Menu extends React.Component {
      render() {
        const { menuVisibility } = this.props
    
        return (
          <div className="flyoutMenu"
               onMouseDown={this.props.handleMouseDown}
               className={menuVisibility ? 'show' : 'hide'}>
            <h2><a href="#">Home</a></h2>
            <h2><a href="#">About</a></h2>
            <h2><a href="#">Contact</a></h2>
            <h2><a href="#">Search</a></h2>
          </div>
        );
      }