Взглянул на ваш GitHub. У вас отличный старт, и вы определенно движетесь в правильном направлении. Тем не менее, есть несколько областей, в которых можно немного полюбить.
Сборка и архитектура
У вас есть несколько функциональных компонентов внутри вашего компонента класса. Я бы порекомендовал извлечь их для целей расширяемости и поддержки. вместо скобок.
Примечание: Вы можете рассмотреть возможность группировки вашего компонента c content (.js
, .css
, .test.js
, et c) в свои собственные каталоги.
HamburgerMenu
const HamburgerMenu = () => (
<HamburgerMenu
isOpen={this.state.open}
menuClicked={this.handleClick.bind(this)}
width={18}
height={15}
strokeWidth={1}
rotate={0}
color='black'
borderRadius={0}
animationDuration={0.5}
/>
);
DesktopNav
const DesktopNav = () => (
<ul className='nav'>
<li className='nav-link'><NavLink to='/add'>Add</NavLink></li>
<li className='nav-link'><NavLink to='/search'>Search</NavLink></li>
</ul>
);
MobileMenu
const MobileMenu = () => (
<ul className='hamburgerDropDown'>
<li className='nav-link'><NavLink to='/add'>Add</NavLink></li>
<li className='nav-link'><NavLink to='/search'>Search</NavLink></li>
</ul>
);
NavBar
Теперь вы можете импортировать отдельные компоненты. Кроме того, поскольку вы ничего не делаете, кроме установки state
в constructor
, вы можете вытащить это из конструктора и установить его на уровне класса. При реализации новых компонентов вы можете просто вызывать их, как любой другой компонент, вместо того, чтобы создавать экземпляр функции.
_ Примечание: Я также обновил ваш div
компонент к более семанти c и доступному nav
компоненту.
import React, { Component } from 'react';
import { NavLink } from 'react-router-dom';
import HamburgerMenu from 'react-hamburger-menu';
import {isMobile} from 'react-device-detect';
import HamburgerMenu from './HamburgerMenu';
import DesktopNav from './DesktopNav';
import MobileMenu from './MobileMenu';
import './NavBar.css';
class NavBar extends Component {
state = {
open: false,
hideOrShowHambugerDropDown: 'nav'
}
handleClick = () => {
this.setState({open: !this.state.open});
}
render() {
return (
<nav className='navbar'>
{ this.state.open ? <MobileMenu /> : null}
{isMobile ? <HamburgerMenu /> : <DesktopNav />}
</nav>
);
}
}
Стиль
Теперь по поводу вашего вопроса о стиле. Благодаря стилю родительских компонентов ваш контент находится там, где он должен быть. Вы можете либо настроить padding
вокруг header
, либо использовать margin
для «pu sh» ваших компонентов там, где они вам нужны. Или, как упоминалось в @ drew-reese , вы можете использовать position
(absolute
или fix
, в зависимости от того, что вы хотите), чтобы поместить значок в верхний правый угол.
Также имейте в виду, что Bootstrap CSS может влиять на компоновку ваших компонентов. Возможно, вам придется переопределить стили, установленные Bootstrap в ваших отдельных компонентах.