Hol*_*515 4 javascript typescript reactjs
我有一个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);
}
}
Run Code Online (Sandbox Code Playgroud)
在我的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>
Run Code Online (Sandbox Code Playgroud)
这似乎应该起作用,但不起作用。它从不创建TruckJobComp。我做了.forEach我的迭代Map,并为每个value的array,我用.map得到个人工作对象发送到TruckJobComp对象。
当我创建一个临时文件array以从上一个循环中获取作业时:
let tempJobs: IDeliveryJob[];
Run Code Online (Sandbox Code Playgroud)
并在循环中添加:
if (dateJobMap.has(deliveryDateString)) {
let jobsForDate: IDeliveryJob[] = dateJobMap.get(deliveryDateString);
jobsForDate.push(jobInArray);
tempJobs = jobsForDate;
}
Run Code Online (Sandbox Code Playgroud)
然后array在渲染中使用它:
<div className={ styles.column }>
<p className={ styles.description }>{escape(this.props.description)}</p>
{
tempJobs.map(job => (
<TruckJobComp job = { job }/>
))
}
</div>
Run Code Online (Sandbox Code Playgroud)
它按预期显示。
我在Visual Studio Code中确实有警告:
Warning - tslint - ...\TruckDeliverySchedule.tsx(104,38): error no-function-expression: Use arrow function instead of function expression
Run Code Online (Sandbox Code Playgroud)
我不了解。第104行对应于:
dateJobMap.forEach(function(jobsForDate, dateString) {
Run Code Online (Sandbox Code Playgroud)
我对此很陌生,所以我不确定100%的工作原理。只是想把我学到的东西放在一起,使事情起作用。
第二编辑:
{转义(this.props.description)}
{
[...dateJobMap.keys()].map(jobsForDate => // line 154
jobsForDate.map(job => (
<TruckJobComp job = { job } />
))
)
}
Run Code Online (Sandbox Code Playgroud)
产生错误:
[09:06:56] Error - typescript - src\...\TruckDeliverySchedule.tsx(154,27): error TS2461: Type 'IterableIterator<any>' is not an array type.
Run Code Online (Sandbox Code Playgroud)
dateJobMap.forEach(...) returns undefined, so it cannot be mapped to a collection of elements.
ES6 maps have forEach method for compatibility purposes (generally for..of is preferred to iterate over iterables) and don't have map method. A map should be converted to array first, then it could be mapped to an element. Since values aren't used, only keys need to be retrieved:
{
[...dateJobMap.keys()].map(jobsForDate =>
jobsForDate.map(job => (
<TruckJobComp job = { job } />
))
)
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4520 次 |
| 最近记录: |