我正在尝试在从服务器请求新数据时显示叠加层 . 我正在使用setState回调,但覆盖似乎永远不会呈现 .
这是叠加组件:
export default class Overlay extends React.Component {
render () {
// This always prints out as expected
console.log('overlay props', this.props)
var overlayStyle = {///}
return this.props.show ? (<div style={overlayStyle} id="PROBLEMCHILD"></div>) : null;
}
}
这是主要的App组件:
export default class AppView extends React.Component {
constructor(props){
super(props)
this.state = {
///
isLoading: false,
}
}
changeDay (dayTs) {
////
// HERE'S THE THING. Triggered by a button elsewhere.
////
this.setState({isLoading: true}, () => {
var bodyElem = document.getElementById('body')
ReactDOM.render(<AppView day={dayTs} />, bodyElem)
})
}
render () {
return (
<div id="outer-container">
{titleBar}
{footerBar}
</div>
<Overlay show={this.state.isLoading} />
)
}
}
单击日历按钮组件以触发AppView.changeDay() . 当我注释掉changeDay的回调时,叠加层会立即显示 . 当我重新启用它时,Overlay状态确实发生了变化(console.log立即告诉我props.show为TRUE),但是即使我让ajax服务器休眠4秒,覆盖也不显示 .
这在某种程度上与在changeDay()中重新呈现根AppView元素有关吗?根据我的阅读,重新渲染根组件以传递新的道具只是让它自己更新 .
Update: 使用Chrome检查器,我可以看到添加了元素IS . 由于某种原因它只是没有画到屏幕上 .