我想创建一个简单的文件上传器,我已经listOfFiles从 dropzone 拖放过来了。
文件的简单循环
{listOfFiles.map((file, i) => (
<SingleFile
key={i}
index={i}
file={file}
handleDelete={handleDelete}
/>
))}
在组件挂载时,SingleFile我执行axiosAPI 调用以上传文件,使用useEffect简化如下:
useEffect(() => {
if (!props.file) return;
// ...
// Axios call and bunch of states changes.
// ...
}, [props.file]);
上传过程很好,当我拖动另一个文件时,它可以工作,添加新文件listOfFiles然后开始上传。
现在,当我单击里面的删除按钮时SingleFile,handleDelete父组件会触发以删除具有特定索引的文件。
<button onClick={props.handleDelete(index)}> Delete </button>
在 handleDelete
setListOfFiles((listOfFiles) => listOfFiles.filter((f, i) => i !== index));
现在的问题是,当我删除SingleFile了listOfFiles数组被更新,这是一个每个数组元素SingleFile成分进行重新渲染和上传axios再次被调用...等。
当另一个实例发生变化时,有没有办法不重新渲染组件的实例?让它在重新渲染时只取决于它的状态/props?并通过父数组中的唯一 id 或索引来控制它的挂载/卸载。