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

Next.js 13 App目录图片上传预览短暂显示后消失问题求助

Next.js 13 App目录图片上传预览异常:预览图短暂显示后消失

在Next.js 13的App目录开发带图片预览的上传组件,试过官方文档、YouTube教程里的多种方案,还尝试了react-dropzone库,都没解决问题——上传图片后预览图仅显示不足1秒就消失。

环境版本

  • Next.js ^13.5.4
  • React & React-Dom 18.2.0

组件代码

export const ChangeBackgroundImage = () => {

const [files, setFiles] = React.useState<File | null>(null);
const [createObjectURL, setCreateObjectURL] = React.useState<any>(null);
const [src, setSrc] = React.useState<any>(null);

const uploadToClient = (event: React.ChangeEvent<HTMLInputElement>) => {
if (event.target.files && event.target.files[0]) {
    const i = event.target.files[0];

    setFiles(i);
    setCreateObjectURL(URL.createObjectURL(i));

    const reader = new FileReader();
    reader.onload = function () {
       if (typeof reader.result === 'string') {
            console.log('Hello World');
            setSrc(reader.result);
        }
        return;
    }
        
    if (filesNew !== null) {
        reader.readAsDataURL(filesNew[0]);
    }
}
};

return (
    <div className={style.change_bg}>
        <h3>Change Background Image</h3>
        <p className={style.change_bg_descP}>
            Select A New Image And Upload It!
        </p>
        <div className={style.change_bg__form_div}>
            <UploadImageSVG width={40} height={40} color={Colors.blue_med} />
            {/* <input 
                type="file"
                accept='image/*'
                name='fileUpload'
                id='fileUpload'
                onChange={( event ) => {
                    // onFileChange(event);
                    if (event?.target?.files?.[0]) {
                        const file = event.target.files[0];
                        if (file && file.type.substring(0, 5) === "image") { setImage(file) }
                        else { setImage(null) }
                    }
                }}
                hidden
            /> */}
            <input type="file" name='image' accept='image/*' onChange={uploadToClient} />
        </div>

        <section className={style.handleImageDeletion}>
            <FolderSVG width={20} height={20} color={Colors.blue_med} />
            {src && <Image src={src} alt='Some Image' width={100} height={100} />}
            {src && console.log(src)}
            {files && files.name}
        </section>
    </div>
)
}

补充说明

  • 注释掉的input标签测试后同样出现预览图消失的问题
  • 使用react-dropzone库实现上传,也存在相同的异常现象

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 18:42:48