Держите кнопку на краю боковой панели - PullRequest
0 голосов
/ 26 февраля 2019

Я работаю над шаблоном реагирования и хочу иметь компонент боковой навигации.Я борюсь с расширяющейся частью.Поэтому, когда расширяется навигационный компонент, я хочу, чтобы содержимое уменьшалось, а кнопка развертывания / свертывания оставалась на краю меню.

закрыто

enter image description here

открыто

enter image description here

Моя идея состояла в том, чтобы использовать response-bootstrap и его компонент Col, но это не сработало.Моя следующая идея - отслеживать ширину меню боковой панели и соответственно корректировать содержимое и кнопки.Для этой идеи, я думаю, мне нужно подтянуть состояние ширины до моего компонента верхнего уровня, но это кажется эскизом.Я пытаюсь выяснить, как получить ширину компонента по мере его расширения и сжатия.Мой опыт довольно низкий, это мой первый проект по реагированию.

App.js (компонент верхнего уровня)

import React, { Component } from "react";
import { Route, NavLink, HashRouter } from "react-router-dom";
import Home from "./Home";
import SidebarContainer from "./Sidebar/SidebarContainer";
import Row from "react-bootstrap/Row";

export default class App extends Component {
  render() {
    return (
      <HashRouter>
        <div>
          <Row>
            <div className="header">
              <span>Company Name</span>
              <span>App Name Goes Here</span>
              <span>Hello Username</span>
            </div>
          </Row>

          <Row>
            <SidebarContainer/>
            <div className="content">
              <Route exact path="/" component={Home} />
            </div>
          </Row>
        </div>
      </HashRouter>
    );
  }
}

SidebarContainer

import React, { Component } from "react";
import ToggleButton from './ToggleButton';
import SidebarMenu from './SidebarMenu';

export default class SidebarContainer extends Component {
  constructor(props) {
    super(props);
    this.state = {
      SidebarOpen: false
    };
    this.toggleSidebar = this.toggleSidebar.bind(this);
  }

  toggleSidebar(){
      this.setState({
          SidebarOpen: !this.state.SidebarOpen
      });
    }

    render(){
        return (
            <div>
                <ToggleButton onClick = {this.toggleSidebar} menuVisibility = {this.state.SidebarOpen}/>
                <SidebarMenu menuVisibility = {this.state.SidebarOpen}/>

            </div>
        )
    }
}

Меню боковой панели

import React, { Component } from "react";
import "./SidebarMenu.css";
import FeedbackButton from "./FeedbackButton";

export default class SidebarMenu extends Component {
    render() {
        let visibility = "hide";
        if(this.props.menuVisibility){
            visibility = "show";
        }

      return (
        <div id="SidebarMenu" 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>
        <FeedbackButton/>
        </div>
      )
    }
};

Кнопка

import React, { Component } from "react";
import "./ToggleButton.css"

export default class ToggleButton extends Component {
    render() {
        let menuStatus = "hidden";
        let direction = ">"
        if(this.props.menuVisibility){
            menuStatus = "open"
            direction = "<"
        }

      return (
          <button id="toggleButton" className={menuStatus} onClick={this.props.onClick}> {direction} </button>
      )
    }
};
...