You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

ReactJS中数组Map遍历任务时出现任务重复显示的问题求助

解决任务重复显示的问题

看起来你遇到的核心问题是任务被重复添加到对应日期的div中,不管用map还是for循环都出现这个情况,大概率是因为这段渲染任务的代码被执行了多次,而且每次执行时没有先清空对应日期div里已有的任务元素。

为什么会出现重复?

举个简单的场景:如果你的页面在数据更新、页面重新渲染这类触发条件下,会再次调用这段tasks.map(...)的代码,那么每次调用都会给对应日期div新增一批<p>元素,而不是替换掉旧的内容,自然就会出现任务重复显示的问题。

具体修复方案

你可以根据自己的场景选择下面的解决方案:

方案1:单个日期div清空后再添加(适合同一日期仅一个任务的场景)

修改原代码,在创建新任务元素前,先清空目标日期div里的旧内容:

tasks.map((task) => { 
  var taskDay = document.getElementById(task.deadline); 
  if(taskDay){ 
    // 先清空当前日期div内的旧任务
    taskDay.innerHTML = '';
    var newTaskP = document.createElement("p"); 
    newTaskP.innerHTML = task.taskId; 
    taskDay.appendChild(newTaskP); 
  } 
})

方案2:先批量清空所有日期div(适合多任务场景)

如果同一个日期可能存在多个任务,方案1会导致每个日期只保留最后一个任务。这时候建议先统一清空所有日期div的任务区域,再重新渲染所有任务:

// 先获取所有日期div并清空任务内容
document.querySelectorAll('div[id^="20"]').forEach(div => {
  // 这里的选择器适配YYYY-MM-DD格式的id,可根据实际年份调整开头数字
  div.innerHTML = '';
});

// 重新渲染所有任务
tasks.map((task) => { 
  var taskDay = document.getElementById(task.deadline); 
  if(taskDay){ 
    var newTaskP = document.createElement("p"); 
    newTaskP.innerHTML = task.taskId; 
    taskDay.appendChild(newTaskP); 
  } 
})

额外排查点

你还可以检查这段代码是否被绑定到了重复触发的事件上(比如window.onresize、数据监听的回调函数),如果是这类情况,需要调整触发逻辑,避免不必要的重复执行。

内容的提问来源于stack exchange,提问作者user12584812

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.29 23:27:46