我目前正在嘗試爲我的響應網站添加側導航欄幻燈片功能。我正在關注第一個動畫示例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