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

Next.js路由跳转后图片列表数据丢失问题求助

问题原因与解决办法:添加图片后历史数据丢失

问题根源

你在story路由中使用的fileStory初始值是空数组,且每次进入该页面都会重置为初始状态。当执行handleAddStory时,你是基于这个空数组来生成新的图片列表,然后直接覆盖localStorage中的数据——这就导致之前保存的图片记录被清空,home页面自然只能看到最新添加的那一张。

解决步骤

1. 让story路由的state从localStorage读取初始数据

修改story路由的state初始化逻辑,确保每次进入页面时,先加载已保存的图片列表:

const [fileStory, setFileStory] = useState(() => {
  const savedImages = localStorage.getItem("imageList");
  return savedImages ? JSON.parse(savedImages) : [];
});

2. 完善handleAddStory的边界判断(可选但推荐)

添加空文件判断,避免用户未选择文件时执行无效操作:

const handleAddStory = () => {
  if (!selectedFile) return;
  
  setFileStory((previous) => {
    const newImageList = [...previous, URL.createObjectURL(selectedFile)];
    localStorage.setItem("imageList", JSON.stringify(newImageList));
    router.push('/');
    return newImageList;
  });
  setSelectedFile(null);
};

3. 优化home路由的state初始化(可选)

将home路由的state初始化改为函数式,避免每次组件渲染都重复读取localStorage:

const [images, setImages] = useState(() => {
  const savedImages = localStorage.getItem("imageList");
  return savedImages ? JSON.parse(savedImages) : [];
});

原理说明

修改后,story页面的初始state会先从localStorage加载已有的图片数据,添加新图片时是在历史列表的基础上追加,而非从空数组重新构建。这样localStorage中的数据会持续累积,home页面就能展示所有已添加的图片了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 12:50:05