以下代码显然不起作用 但是想法是,我想根据子组件的clientHeight进行条件渲染,不确定是否可能
class App extends Component {
constructor() {
super();
this.comp = {};
this.state = {
clientHeight: 0
};
}
componentDidMount() {
console.log(this.comp)
this.setState({
clientHeight: this.comp.clientHeight
});
}
render() {
return (
<div>
<Hello name={this.state.name} ref={comp => this.comp = comp}/>
{
this.state.clientHeight > 100 ? <ComponentA /> : <ComponentB />
}
</div>
);
}
}
答案 0 :(得分:0)
您可以通过设置clientHeight
组件
<Hello/>
值来执行此操作
class App extends Component {
constructor() {
super();
this.state = {
clientHeight: 0
};
}
handler(newSize) {
this.setState({
clientHeight: newSize
})
}
render() {
return (
<div>
<Hello name={this.state.name} onResize={this.handler}/>
{
this.state.clientHeight > 100 ? <ComponentA /> : <ComponentB />
}
</div>
);
}
}
你可以通过window.addEventListener('resize', ((c)=>{console.log(window.innerHeight)}));
答案 1 :(得分:0)
事实证明@Dane的想法帮助了我。用componentDidUpdate
钩子。这个实现了我想要的东西,但它每次渲染两次,一个用于ref分配,并将更新更改为新的clientHeight,然后再根据新的clientHeight渲染。不确定是否有更好的方法。
class App extends Component {
constructor() {
super();
this.comp = {};
this.state = {
clientHeight: 0
};
}
componentDidUpdate(prevProps){
if(prevProps !== this.props){
this.setState({
clientHeight: this.comp.clientHeight
})
}
}
render() {
return (
<div>
<Hello name={this.state.name} ref={comp => this.comp = comp}/>
{
this.state.clientHeight > 100 ? <ComponentA /> : <ComponentB />
}
</div>
);
}
}