で表示するテキストメッセージを、私はセクションにテキストメッセージを表示する必要があります。が反応 - セクション
メッセージが今日受け取った、メッセージが昨日受け取った、メッセージは今週受け取った、メッセージが今月受け、その後ヶ月間隔で続けます。 ..
例:
私の試み:
ダッシュボード.jsファイル
import React from "react"
import MessageList from "./MessageList"
export default class Dashboard extends React.Component {
constructor() {
super()
this.state = {
messages: [
{
id: "1",
body: "Hello",
date: "2017-04-22T09:25:50",
},
{
id: "2",
body: "Hello",
date: "2017-04-21T04:31:22",
},
{
id: "3",
body: "How are you?",
date: "2017-04-21T03:08:31",
},
{
id: "4",
body: "Meeting soon",
date: "2017-04-18T01:10:32",
}
]
}
}
render() {
return (
<div id="dashboard">
<MessageList messages={this.state.messages}/>
</div>
)
}
}
MessageList.js
import React from "react"
export default class MessageList extends React.Component {
constructor() {
super()
}
render() {
var currentDate = new Date()
var currentDayOfMonth = currentDate.getDate()
var currentDayOfWeek = currentDate.getDay()
var timeline = "Today"
const messageList = this.props.messages.map((message) => {
var date = message.date.substring(0, 10)
var time = message.date.slice(12)
var testDate = new Date(date)
var testDayOfMonth = testDate.getDate()+1
var testDayOfWeek = testDate.getDay()
if(currentDayOfMonth == testDayOfMonth+1){
timeline = 'Yesterday'
} else if(currentDayOfMonth > testDayOfMonth+1 && currentDayOfWeek - testDayOfWeek < 6) {
timeline = 'This week'
}
return (
<div key={message.id}>
<h2>{timeline}</h2>
<li className="list-group-item">
Date: {date} <br></br>
Time: {time} <br></br>
Body: {message.body}
</li>
</div>
)
})
return (
<div id="messageList">
<ul className="list-group">
{messageList}
</ul>
</div>
)
}
}
しかし、私のアプリは、次のようになります。
H2
が毎回表示されています。これを修正する最も良い方法は何ですか?
さらに、メッセージを一般的に構造化するには、より良い方法を知っていますか?私はすべてのグループに対してを作成することを検討しています。今日はcomponent
、昨日はcomponent
です。
ありがとうございます。
ご回答いただきありがとうございます。私の唯一の関心事は、MessageListコンポーネント(今日、昨日、今週)はすべて繰り返しすぎるということです。コード間には1つの単語の違いがあります。混乱を最小限にする方法はありますか? – user2456977
問題はマップを使用するときに、配列要素ごとに何かを返すことです。メッセージリストには、3種類のメッセージが混在しています。したがって、UIで表示しているときは、表示しているメッセージの種類がわからないことがあります。私はそれらを一度まとめて1つずつ表示することしか考えられませんでした。 あなたが望む方法が他にもある場合は、わかりません。 – Nitesh