Держите кнопку на краю боковой панели

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

закрыто

Держите кнопку на краю боковой панели

открыть

Держите кнопку на краю боковой панели

Моя идея состояла в том, чтобы использовать react-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>
    );
  }
}

Боковая панельКонтейнер

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>
      )
    }
};
I want the content to shrink and the expand/collapse button to stay on the edge of the menu - вы должны проверить flexbox.
extempl 26.02.2019 19:21

Это выглядит многообещающе. Я пробую это сейчас. Я дам вам знать, если это сработает.

Clinton Cochrane 26.02.2019 19:22

Это сработало отлично. Я заметил, что компонент React-Bootstrap Row переопределяет потоковую обертку на обертку, и как только я изменил это на без обертки, все заработало отлично. Большое спасибо. @extempl Я собираюсь кое-что почистить и опубликовать обновленный код на случай, если кто-то еще наткнется на это в будущем.

Clinton Cochrane 26.02.2019 19:38
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
3
282
0

Другие вопросы по теме