React使用react-dropzone拖拽上传时checkbox自动勾选问题求助
问题根因
- 核心原因是
confirmChecked的判断逻辑完全写反:当前实现中,当文件索引不在已选中列表indexesArrayForChekedList时返回true,让checkbox处于勾选状态。初始状态下选中列表为空,所有新增拖拽文件的索引都不在列表中,所以新增文件的checkbox会被自动设为勾选。 confirmChecked调用次数和文件行数一致是正常现象:每次filesToUpload更新触发组件重渲染时,每个文件行的checkbox都会调用该函数计算checked属性值,并非拖拽操作主动触发了onChecked相关回调,只是重渲染导致的函数执行。- 配套的
handleCheckedStatus交互逻辑也存在写反问题:当前逻辑是用户手动勾选checkbox时(e.target.checked为true),反而把对应索引从选中列表里移除,取消勾选时才添加,和正常交互逻辑相悖。
修复方案
1. 修正confirmChecked判断逻辑
const confirmChecked = useCallback( index => { // 索引在选中列表中才返回true,对应checkbox勾选 return indexesArrayForChekedList.includes(index); }, [indexesArrayForChekedList], );
2. 修正handleCheckedStatus交互逻辑
const handleCheckedStatus = useCallback( (e, idx) => { const checked = e.target.checked; if (checked) { // 勾选时追加索引到选中列表 setIndexesArrayForChekedList(prev => [...prev, idx]); } else { // 取消勾选时从列表中移除对应索引 const indexArrayForUpdate = indexesArrayForChekedList.filter(el => el != idx); setIndexesArrayForChekedList(indexArrayForUpdate); } }, [indexesArrayForChekedList], );
可选优化
删除文件行时同步把对应索引从indexesArrayForChekedList中移除,避免选中列表残留无效索引。
内容的提问来源于stack exchange,提问作者terecal
相关产品推荐
相关产品推荐

