gpt4 book ai didi

javascript - momentjs - 通用(同构)js 应用程序中的 fromNow() 方法

转载 作者:太空宇宙 更新时间:2023-11-03 22:33:46 24 4
gpt4 key购买 nike

我有一个使用 Node.js 和 React.js 构建的应用程序,它是通用的(或之前称为“同构”的),并与 REST API 进行交互以获取数据。

在某些组件的render方法中,我以2天前几秒前等格式显示日期,在这种情况下.js 完美运行。我正在谈论它的方法 fromNow(),例如:

render() {
const { date } = this.props;
const formattedDate = moment(date).fromNow();

return (
<div>{formattedDate}</div>
);
}

但问题是:

Warning: React attempted to reuse markup in a container but the
checksum was invalid. This generally means that you are using server
rendering and the markup generated on the server was not what the
client was expecting. React injected new markup to compensate which
works but you have lost many of the benefits of server rendering.
Instead, figure out why the markup being generated is different on the
client or server:
(client) 0:0.2.1.0.1.0.3.2">14 minutes ago</div>
(server) 0:0.2.1.0.1.0.3.2">17 minutes ago</div>

我认为服务器时间和客户端时间可能不同,这会导致问题。在这种情况下,最好的解决方案是什么?也许值得在 API 端而不是应用程序端格式化日期?你的想法?

谢谢!

最佳答案

我在使用 MomentJs 时也遇到了同样的问题。我选择了一个小的 Javascript 助手,并且我的同构组件一切都很好......

<强>1。组件

  _fetch() {
return this.props.store.dispatch(loadActs()).then(
results => {
const inclSeconds = true;
this.setState({
......
lastUpdate: formatAMPM(new Date(), inclSeconds).toString()
})
}
)
}

<强>2。辅助实用程序

module.exports = {
formatAMPM: (date, inclSecs=false) => {
let hours = date.getHours();
let minutes = date.getMinutes();
let seconds = date.getSeconds();
let ampm = hours >= 12 ? 'PM' : 'AM';
let strTime= ''
hours = hours % 12;
hours = hours ? hours : 12; // the hour '0' should be '12'
minutes = minutes < 10 ? '0'+ minutes : minutes;
seconds = seconds < 10 ? '0'+ seconds : seconds;
if (inclSecs) {
strTime = hours + ':' + minutes + ':' + seconds + ' ' + ampm;
} else {
strTime = hours + ':' + minutes + ' ' + ampm;
}
return strTime;
}
}

关于javascript - momentjs - 通用(同构)js 应用程序中的 fromNow() 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33040378/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com