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

使用React DnD拖拽元素时状态重置问题求助

表单构建器拖拽元素丢失问题修复

问题根源

Example.jsx中的addItem函数直接依赖当前作用域下的Items状态变量,由于React状态更新的闭包特性,拖拽触发状态更新时,函数捕获的Items可能是初始状态值,导致每次添加新元素时都基于初始数组重新创建,覆盖了之前已添加的元素。

修复方案

将setItems的更新方式改为函数式更新,确保每次状态更新都基于最新的状态快照:

修改Example.jsx中的addItem函数:

const addItem = (item) => {
  setItems(prevItems => [...prevItems, item]);
};

原理说明

函数式更新会接收React内部维护的最新状态作为参数(prevItems),通过展开这个最新数组并追加新元素,保证每次更新都是在已有元素的基础上进行,彻底避免闭包导致的旧状态复用问题。

验证修改后,拖拽元素到表单时,之前添加的元素会被保留,新元素正常追加到列表中。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 13:45:27