我正在开发具有可变时间范围的议程/日历应用程序。要显示当前时间的线条并显示已进行约会的块,我需要计算在给定时间范围内与一分钟对应的像素数。
例如:如果议程从早上 7 点开始,到下午 5 点结束,则总范围为 10 小时。假设日历主体的高度为 1000 像素。这意味着每小时代表 100 像素,每分钟代表 1,66 像素。
如果当前时间是下午 3 点。距离议程开始还有 480 分钟。这意味着显示当前时间的线应位于距日历主体顶部 796,8 像素 (480 * 1,66) 处。
计算没有问题,但获得议程主体的高度。我正在考虑使用 React Ref 来获取高度,但出现错误: ref.current is null
下面是一些代码:
class Calendar extends Component {
calendarBodyRef = React.createRef();
displayCurrentTimeLine = () => {
const bodyHeight = this.calendarBodyRef.current.clientHeight; // current is null
}
render() {
return (
<table>
<thead>{this.displayHeader()}</thead>
<tbody ref={this.calendarBodyRef}>
{this.displayBody()}
{this.displayCurrentTimeLine()}
</tbody>
</table>
);
}
}
原文由 Thore 发布,翻译遵循 CC BY-SA 4.0 许可协议
所以关于 refs 的事情是它们不能保证在第一次渲染时设置。您可以确定它们是在
componentDidMount
期间和之后设置的,因此您有两种前进方式。您可以使用回调样式 ref 并基于此设置状态。例如,不是将您的 ref 作为道具传递,您可以传递对函数的引用,如
this.handleRef
它会在那里执行一些逻辑:或者,您可以保留当前设置,但您必须将
clientHeight
位移动到生命周期函数,例如:最终,您不能立即读取这样的 ref 的当前值,您必须在渲染后检查它,然后从 state 读取您的
bodyHeight
。