我目前正在尝试为我的响应网站添加侧导航栏幻灯片功能。我正在关注第一个动画示例here。如何使用三元运算符内联我的React样式?
我能够让它首先与document.getElementById("mySidenav").style.width = "250px";
一起工作。不过,我宁愿不使用document
来操纵DOM。我想要使用本地状态并更新它。我正在使用JavaScript内联样式。这里是一些代码看起来像工作:
openNavbar =() => {
document.getElementById("mySidenav").style.width = "0";
};
<div style={styles.navbarMobile} onClick={this.openNavbar}>
<NavSidebar/>
</div>
navbarMobile: {
height: '100vh',
width: '100%',
position: 'fixed',
zIndex: 11,
top: '0',
left: '-100%',
overflowX: 'hidden',
overflowY: 'hidden',
transition: '1s',
paddingRight: '15px',
display: 'none',
'@media (max-width: 992px)': {
display: 'block',
backgroundColor: 'white'
}
}
现在很明显,我这样做比这个例子有点不同。我操纵左侧位置,而不是操纵宽度。它工作和运行顺利。但是,我现在试图实现一些本地状态并根据本地状态值更改CSS。这里是我有:
this.state = {
navOpen: false
}
openNavbar =() => {
this.setState({navOpen: true});
};
<div style={this.state.navOpen ? {left: 0} : {left: -100%}, styles.navbarMobile} onClick={this.openNavbar}>
<NavSidebar/>
</div>
navbarMobile: {
height: '100vh',
width: '100%',
position: 'fixed',
zIndex: 11,
top: '0',
left: '-100%',
overflowX: 'hidden',
overflowY: 'hidden',
transition: '1s',
paddingRight: '15px',
display: 'none',
'@media (max-width: 992px)': {
display: 'block',
backgroundColor: 'white'
}
}
主要重点是如何通过三元,同时也添加其他内联样式。通过做上面我所做的,navbarMobile
中的所有css都得到应用。但是,三元从未运行。如果我删除了styles.navbarMobile
,那么三元组就可以工作。有没有办法让我可以一起跑这两个?我应该如何处理这个问题的任何示例或想法?
这非常有道理。真的很好解释。我对javascript和es6相当陌生,因此很高兴能够重新解释这些事情,因为我经常忘记哈哈。谢谢安德鲁。 – Nappstir
我有一个简单的问题。你知道三态在状态改变时是否运行?还是一次性评估? – Nappstir
@Nappstir每次状态改变时都会运行,因为元素*会在每次状态改变时被重新渲染(这意味着每次状态改变时都会调用render方法)。 – Li357