Я пытаюсь открыть меню вне холста и затем применить overflow-y: hidden;
к остальной части документа, чтобы предотвратить прокрутку. Это удивительно сложно, учитывая, как React и styled-components
работают с state
.
Как мне получить доступ к body
? Я действительно не хочу использовать document
, чтобы получить / установить, потому что это сайт SSR Gatsby, и это приведет к ошибкам. Есть ли родной способ подняться так высоко с этим стеком?
import React from 'react'
import styled from 'styled-components'
import NavMenu from '../NavMenu/navmenu.js'
// Styles, w/ styled-component syntax
const HeaderBG = styled.header`
background-color: ${props => props.theme.purple};
padding: 5px 25px;
`
const HeaderContainer = styled.section`
align-items: center;
display: flex;
justify-content: space-between;
margin: 0 auto;
max-width: ${props => props.theme.xl};
`
const NavMenuButton = styled.div`
cursor: pointer;
`
const NavMenuLine = styled.div`
background: #fff;
height: 2px;
margin: 5px 0;
transition-duration: .15s;
transition-property: transform, opacity;
transition-timing-function: ease-in-out;
width: 25px;
`
// Header component
class Header extends React.Component {
// Initial menu state is closed (false)
constructor(props) {
super(props)
this.state = {
menuStatus: false
}
}
// Toggles menu open/close state
menuToggle = () => {
this.setState( prevState => ({
menuStatus: !prevState.menuStatus
}))
}
render() {
return (
<div>
<HeaderBG>
<HeaderContainer>
<NavMenuButton onClick={ this.menuToggle } menuState={ this.state.menuStatus }>
<NavMenuLine></NavMenuLine>
<NavMenuLine></NavMenuLine>
<NavMenuLine></NavMenuLine>
</NavMenuButton>
</HeaderContainer>
</HeaderBG>
</div>
)
}
}