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

React图片上传列表显示异常:首张正常,后续上传图片不显示

问题修复方案

你的代码核心问题出在map遍历逻辑上:你没有使用遍历到的单个图片URL,而是把整个file数组直接赋值给了img的src属性。当数组只有一个元素时会被隐式转换为有效字符串显示,但数组包含多个元素时,src会变成类似[object URL, object URL]的无效值,导致后续图片无法加载。另外,React遍历列表时需要给每个元素添加唯一key属性,避免渲染警告。

修正后的代码如下:

function DisImg() {
    const [file, setFile] = useState([]);

    function handleChange(e) {
        const selectedFile = e.target.files[0];
        if (selectedFile) { // 增加判断,避免未选择文件时触发错误
            const fileUrl = URL.createObjectURL(selectedFile);
            setFile(prevV => [...prevV, fileUrl]);
        }
    }

    return (
        <>
            {/* 需要一次性选多张图的话,可添加multiple属性 */}
            <Input type="file" onChange={handleChange}>Choose file</Input>
            {
                file.map((imgUrl, index) => {
                    // 使用遍历到的单个URL作为src,添加index作为key(生产环境建议用更唯一的标识)
                    return <img key={index} src={imgUrl} alt="documents" height="50px" width="50px" />
                })
            }
        </>
    );
}

额外优化建议:

  • 如果需要支持一次性选择多张图片,给Input添加multiple属性,并修改handleChange遍历所有选中文件:
function handleChange(e) {
    const files = Array.from(e.target.files);
    const fileUrls = files.map(file => URL.createObjectURL(file));
    setFile(prevV => [...prevV, ...fileUrls]);
}

内容的提问来源于stack exchange,提问作者samyak.m

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 01:27:20