【发布时间】:2020-09-22 14:15:18
【问题描述】:
我正在尝试迭代一系列日期,然后渲染匹配的对象。
没有存储日期
日期需要存储在状态datesarray[] 中(尽管只有键),事件类似地存储在events[] 的arrant 中。两者都填充如下:
componentDidMount() {
fetch('http://127.0.0.1:5002/events')
.then(res => res.json())
.then((data) => {
{/* Orders descending */}
this.setState({events: data.sort(
(event1,event2) => -event1.date.localeCompare(event2.date))})
{/* Places dates into an array */}
let eventdate = "";
for (var r in data) {
eventdate = r.date;
console.log("help");
if (!this.state.datesarray.includes(eventdate)) {
this.state.datesarray.push(eventdate);
}
}
}
).catch(console.log)
}
我修改了 for 循环以使用 Object.keys,但是这同样提供了一个键,而不是日期值:
{/* Places dates into an array */}
{Object.keys(data).map(date => this.setState({ datesarray: [...this.state.datesarray, date] }))}
以下出品者
// convert object to key's array
Object.keys(data).forEach(val => console.log(val));
Object.values(data).forEach(val => console.log(val));
部分成功#1
在不映射下一个日期的情况下运行应用程序时,我确实得到了结果。
render() {
return(
<div className="container">
{this.state.events
.filter(event => event.date
.includes({date}))
.map(filteredEvent =>(
<Events event={filteredEvent} />
)
)
}
)}
</div>
}
但是,当尝试使用外部地图获取存储在datesarray[] 中的日期时,不会呈现任何内容
render() {
return(
<div className="container">
{this.state.datesarray.map(date =>
{this.state.events
.filter(event => event.date
.includes({date}))
.map(filteredEvent =>(
<Events event={filteredEvent} />
))}
)}
</div>
);
}
部分成功 #2
我现在可以将日期存储在 mt componentDidMount 中:
Object.values(data).forEach(val =>{
!datesarray.includes(val.date) && datesarray.push(val.date)
});
我可以单独打印日期和记录。请记住,我正在尝试使用嵌套地图进行分组。我只是不知道如何将它们打印在一起。
我正在尝试将第一个映射中的 {date} 值转换为 .includes 值。
render() {
return(
<div className="container">
{this.state.datesarray.map(date => <h1>{date}</h1>)}
{this.state.events
.filter(event => event.date
.includes("2020-09-30"))
.map(filteredEvent =>(
<Events event={filteredEvent} />
)
)}
</div>
);
}
【问题讨论】:
-
我刚刚意识到问题在于没有将日期填充到数组中。让我们看看我能不能弄明白。
-
我已经弄清楚如何将项目添加到数组中。但是,我添加的键不是我想要的日期值。问题已更新。