Опция 1: форматирование непосредственно при рендеринге
Вместо <p>{ data[key].start_date }</p>
запись <p>{new Intl.DateTimeFormat('en-US').format(data[key].start_date)}</p>
.
В функции рендеринга вы можете написать JavaScript, чтобы вы могли отформатировать дата там, как вы делаете в вашем console.log
.
Более чистым подходом было бы использование метода formatDate в вашем компоненте класса React,
// This can even be a global helper function, it doesn't use any class variables
formatDate(timestamp) {
return new Intl.DateTimeFormat('en-US').format(timestamp);
}
render() {
...
<p>{ this.formatDate(data[key].start_date) }</p>
...
}
Вариант 2: Сохранить отформатированную дату в state
Вы также можете сохранить правильный формат в состоянии, как только получите данные. Вместо this.setState({data: res.data})
:
this.setState({
data: res.data,
formattedStartDate: new Intl.DateTimeFormat('en-US').format(res.data.event_info.start_date)
});
И затем в вашей функции рендеринга используйте, например, <p>{ this.state.formattedStartDate }</p>
.
Сохранение отформатированной даты в состоянии более эффективно, потому что если ваш компонент повторно отрисовывается без изменения состояния, вместо форматирования снова будет использоваться уже отформатированная строка даты.
Обратите внимание, что если у вас есть данные для нескольких событий (я вижу, вы делаете карту по ключам в данных), вы следует хранить отформатированные даты для всех событий. В этом примере рассматривается только тот случай, когда у вас есть только одна отформатированная дата, которую вы хотите сохранить.
Вариант 3: Извлечь логи форматирования c в компонент React
Это может быть слишком много для такого простого случая, но вы могли бы иметь компонент с именем <FormattedDate />
, который получает метку времени в качестве реквизита и отформатирует время.
<div className="user-detail">
...
<FormattedDate timestamp={data[key].start_date} />
...
</div>
Преимущество этого подхода состоит в том, что вы можете использовать его в другие части вашего приложения, а затем, если вы когда-нибудь решите каким-либо образом стилизовать даты или изменить форматирование, вам просто нужно изменить этот один компонент, и он будет обновляться везде.
При создании <FormattedDate />
компонент, вы должны сделать его PureComponent , поэтому он будет перерисовываться только при изменении временной метки. Таким образом, вы можете безопасно использовать Option # 1 и просто отформатировать дату внутри функции рендеринга, и если метка времени не изменится, не будет никаких бесполезных вычислений.