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

点击showBom后拖拽数据至FullCalendar出现批量重复添加问题排查

问题根因分析

核心原因:拖拽事件重复绑定

每次调用showBom(index)获取并渲染BOM表格时,重复给表格行添加了拖拽监听事件,且未在重新渲染前清除旧的监听逻辑。

  • 首次点击showBom:表格渲染后,给行绑定1次「拖拽触发添加日历」的逻辑;
  • 第二次点击showBom:新表格渲染时,未移除之前的监听,再次给行绑定第2次相同逻辑;
  • 以此类推,点击N次后,拖拽一行会触发N次添加逻辑,最终导致N条重复数据被同步到日历。

常见代码场景佐证

这类问题通常出现在以下两种写法中:

  1. 在showBom方法内直接绑定拖拽事件,未做去重处理:
showBom(index) {
  // 获取BOM数据
  this.bomData = await fetchBomData(index)
  // 每次调用都新增监听,未清除旧监听
  this.$nextTick(() => {
    document.querySelectorAll('.bom-table-row').forEach(row => {
      row.addEventListener('dragend', this.handleDragToCalendar)
    })
  })
}
  1. 使用第三方拖拽库时,未销毁旧实例就重复初始化:
showBom(index) {
  this.bomData = await fetchBomData(index)
  this.$nextTick(() => {
    // 未销毁之前的Sortable实例,直接创建新实例导致多监听叠加
    new Sortable(document.querySelector('.bom-table'), {
      onEnd: this.handleDragToCalendar
    })
  })
}

次要可能:响应式状态残留

如果handleDragToCalendar方法依赖的响应式数据在showBom调用时未重置,也可能导致多次触发,但最普遍的诱因还是事件监听的重复绑定。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 20:05:03