【发布时间】:2020-06-12 22:33:12
【问题描述】:
背景:
定义了一个钩子并返回一个对象,该对象包含最后一次修改文件的时间戳。
我计算从时间戳到现在的差异,以向用户显示距离他们上次保存的时间。
const StageFooter = (props) => {
const [, , meta] = useMetadata("Tenant Setup Data", "setupData")
return (
<StageControls>
<div id="footer-start"></div>
<SavingBlock key={meta?.modified}>
{`Last saved ${
meta.modified !== undefined ? formatDistanceToNow(meta.modified) : " "
} ago`}
</SavingBlock>
<div id="footer-end"></div>
</StageControls>
)
}
export default StageFooter
问题:
到现在为止计算出的时间戳差异不会实时更新。例如,它会说“最后保存 10 分钟前”,但几分钟后字符串仍然保持不变。只有当用户离开页面然后返回或用户刷新页面时,它才会更新。
考虑到这一切,我基本上希望每过一分钟就重新渲染组件,以便实时更新值。
感谢您的宝贵时间!
【问题讨论】:
-
这不是 react 应该如何工作的——当最后保存的值更新时,它应该触发 react 生命周期更新,或者通过像 redux 使用的动作处理程序,或者响应说,一个 websocket播送。拥有基于计时器的更新在这里是一种反应反模式。我希望我能提供更多帮助,但我还没有使用钩子
-
为什么不使用 Moment.js?它完全符合您的要求。我不会为此每时每刻都重新渲染我的组件。
标签: javascript reactjs components react-hooks