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

React中过滤数组后更新Local Storage致应用崩溃的解决方法

问题解决:React中修改State后同步LocalStorage的正确方式

问题分析

你的应用崩溃核心原因有两个:

  • 初始化state时,若LocalStorage中没有watchListData数据,JSON.parse(localStorage.getItem("watchListData"))会返回null,后续调用filter方法会因null不是数组而报错。
  • 注释掉了同步LocalStorage的useEffect,导致过滤后的数组无法更新到LocalStorage,数据无法持久化。

正确实现步骤

1. 安全初始化State

给初始State设置默认空数组,避免null导致的方法调用错误:

const [savedData, setSavedData] = useState(
  JSON.parse(localStorage.getItem("watchListData")) || []
);

2. 使用useEffect同步LocalStorage

启用被注释的useEffect,监听savedData的变化,每当State更新时自动同步到LocalStorage:

useEffect(() => {
  localStorage.setItem("watchListData", JSON.stringify(savedData));
}, [savedData]);

3. 完整修正后的组件代码

import { useState, useEffect } from "react";

export default function Watchlist() {
  // 安全初始化state,默认空数组
  const [savedData, setSavedData] = useState(
    JSON.parse(localStorage.getItem("watchListData")) || []
  );

  function remove(id) {
    setSavedData((prevSavedData) =>
      prevSavedData.filter((movie) => movie.id !== id)
    );
  }

  // 监听state变化,同步到localStorage
  useEffect(() => {
    localStorage.setItem("watchListData", JSON.stringify(savedData));
  }, [savedData]);

  // 后续渲染逻辑...
}

关键说明

  • 初始化时的|| []确保即使LocalStorage无数据,savedData始终是数组,避免filter调用报错。
  • useEffect的依赖数组savedData保证只有当数组内容变化时,才会执行LocalStorage更新操作,避免不必要的重复写入。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 00:25:21