【发布时间】:2018-08-01 16:48:48
【问题描述】:
我有一个Map 对象:
let dateJobMap = new Map();
for (let jobInArray of this.state.jobs) {
let deliveryDate: Date = new Date(jobInArray.DeliveryDate);
let deliveryDateString: string = deliveryDate.toLocaleDateString("en-US");
if (dateJobMap.has(deliveryDateString)) {
let jobsForDate: IDeliveryJob[] = dateJobMap.get(deliveryDateString);
jobsForDate.push(jobInArray);
}
else {
let jobsForDate: IDeliveryJob[] = [jobInArray];
dateJobMap.set(deliveryDateString, jobsForDate);
}
}
在我的render 方法中,我想为值数组中的每个交付作业调用一个 TruckJobComp 对象以显示它:
<div className={ styles.column }>
<p className={ styles.description }>{escape(this.props.description)}</p>
{
dateJobMap.forEach(function(jobsForDate, dateString) {
jobsForDate.map(job => (
<TruckJobComp job = { job } />
))
})
}
</div>
这似乎应该工作,但没有。它从不创建 TruckJobComp。我在我的Map 上进行.forEach 迭代,对于每个value 的array,我使用.map 来获取单个作业对象以发送到TruckJobComp 对象。
当我创建一个临时 array 以从最后一个循环中获取作业时:
let tempJobs: IDeliveryJob[];
并在循环中添加:
if (dateJobMap.has(deliveryDateString)) {
let jobsForDate: IDeliveryJob[] = dateJobMap.get(deliveryDateString);
jobsForDate.push(jobInArray);
tempJobs = jobsForDate;
}
然后在渲染中使用array:
<div className={ styles.column }>
<p className={ styles.description }>{escape(this.props.description)}</p>
{
tempJobs.map(job => (
<TruckJobComp job = { job }/>
))
}
</div>
它按预期显示。
我在 Visual Studio Code 中有警告:
Warning - tslint - ...\TruckDeliverySchedule.tsx(104,38): error no-function-expression: Use arrow function instead of function expression
我知道的不够多,无法理解。第 104 行对应:
dateJobMap.forEach(function(jobsForDate, dateString) {
我对此很陌生,所以我不能 100% 确定其中大部分是如何工作的。只是想把我学到的东西放在一起,让事情发挥作用。
第二次编辑:
{escape(this.props.description)}
{
[...dateJobMap.keys()].map(jobsForDate => // line 154
jobsForDate.map(job => (
<TruckJobComp job = { job } />
))
)
}
产生错误:
[09:06:56] Error - typescript - src\...\TruckDeliverySchedule.tsx(154,27): error TS2461: Type 'IterableIterator<any>' is not an array type.
【问题讨论】:
标签: javascript reactjs typescript