@Speckledcarp ve @ Jamesl'in cevapları her ikisi de mükemmel. Ancak benim durumumda, yüksekliği tam pencere yüksekliğini, oluşturma zamanında koşullu olarak uzatabilecek bir bileşene ihtiyacım vardı ... ancak içinde bir HOC çağırmak render()
tüm alt ağacı yeniden oluşturur. Baaad.
Ayrıca, değerleri sahne olarak almakla ilgilenmedim, ancak div
tüm ekran yüksekliğini (veya genişliğini veya her ikisini) işgal edecek bir ebeveyn istedim .
Bu yüzden bir tam bileşen (ve / veya genişlik) div sağlayan bir Üst öğe yazdım. Boom.
Bir kullanım örneği:
class MyPage extends React.Component {
render() {
const { data, ...rest } = this.props
return data ? (
// My app uses templates which misbehave badly if you manually mess around with the container height, so leave the height alone here.
<div>Yay! render a page with some data. </div>
) : (
<FullArea vertical>
// You're now in a full height div, so containers will vertically justify properly
<GridContainer justify="center" alignItems="center" style={{ height: "inherit" }}>
<GridItem xs={12} sm={6}>
Page loading!
</GridItem>
</GridContainer>
</FullArea>
)
İşte bileşen:
import React, { Component } from 'react'
import PropTypes from 'prop-types'
class FullArea extends Component {
constructor(props) {
super(props)
this.state = {
width: 0,
height: 0,
}
this.getStyles = this.getStyles.bind(this)
this.updateWindowDimensions = this.updateWindowDimensions.bind(this)
}
componentDidMount() {
this.updateWindowDimensions()
window.addEventListener('resize', this.updateWindowDimensions)
}
componentWillUnmount() {
window.removeEventListener('resize', this.updateWindowDimensions)
}
getStyles(vertical, horizontal) {
const styles = {}
if (vertical) {
styles.height = `${this.state.height}px`
}
if (horizontal) {
styles.width = `${this.state.width}px`
}
return styles
}
updateWindowDimensions() {
this.setState({ width: window.innerWidth, height: window.innerHeight })
}
render() {
const { vertical, horizontal } = this.props
return (
<div style={this.getStyles(vertical, horizontal)} >
{this.props.children}
</div>
)
}
}
FullArea.defaultProps = {
horizontal: false,
vertical: false,
}
FullArea.propTypes = {
horizontal: PropTypes.bool,
vertical: PropTypes.bool,
}
export default FullArea
.bind(this)
Zaten yapıcı tarafından bağlı olduğu için geri çağrı argümanlarından kaldırabilirsiniz .