【发布时间】:2018-08-20 12:21:31
【问题描述】:
我的组件中的三元运算符有问题。我创建了一个函数来检查 Sun 是否启动并返回布尔值:
dayTime() {
const time = new Date();
const sunrise = new Date(this.state.sunrise*1000);
const sunset = new Date(this.state.sunset*1000);
return time > sunrise && time < sunset;
}
我使用三元运算符调用函数并根据布尔值设置背景图像:
componentDidMount() {
document.body.style.backgroundImage = "url(" + (this.dayTime()? day_img_cov : night_img_cov) + ")";
}
很遗憾,三元组无法正常工作。它一直选择第二张图像。然而,当我在 render() 中使用三元组时,它可以正常工作:
render() {
return (
<div className="app" style={{backgroundImage: "url(" + (this.dayTime()? day_img : night_img) + ")"}}>
...
</div>
}
【问题讨论】:
-
在渲染中使用会好很多。从 componendDidMount 操作 DOM 无论如何都是 react-antipattern。
-
cDM仅在初始挂载期间调用,从不在更新期间调用。最好将计算移至render。此外,render不会自行触发。道具或状态都必须改变。因此,您还需要一个内部计时器来不断刷新 dayTime 值。欢迎来到 SO!
标签: javascript reactjs ternary