如何在next.js中从localStorage获取数据时停止无限循环?

How to Stop infinite loop while fetching data from localStorage in next.js?

提问人:Rohit Sahani 提问时间:10/22/2023 更新时间:10/22/2023 访问量:36

问:

当我在useEffect Hook中从localStorage获取数据并传递依赖项[]空白时。它可以很好地获取数据,但不能获取新数据。要获取它,它需要刷新页面。当我传递依赖项 [data](获取的数据状态)时,它会开始无限循环。

这是我的实际代码。我已经在useEffect中传递了[data]依赖项,以便在添加新数据时获取。但它开始了无限循环。

const LocalStorage = () => {
  const [data, setData] = useState([]);
  const [id, setId] = useState();
  const [name, setName] = useState();
  const [city, setCity] = useState();

  const handleSubmit = () => {
    console.log(id, name, city);

    const userInput = [...data, { id: id, name: name, city: city }];
    localStorage.setItem("user", JSON.stringify(userInput));

    setId("");
    setName("");
    setCity("");
  };

  useEffect(() => {
    const fetchedData = localStorage.getItem("user");
    const dataObject = JSON.parse(fetchedData);
    setData(dataObject);
  }, [data]);

reactjs next.js 无限循环

评论


答:

0赞 jluims 10/22/2023 #1

在 useEffect 中,您正在修改并依赖于同一 useEffect() 中的数据。这会导致无限循环。我相信您要做的是监听 localStorage 中的更改或仅在 handleSubmit 中调用 setData。

例如:

const LocalStorage = () => {
  const [data, setData] = useState([]);
  const [id, setId] = useState();
  const [name, setName] = useState();
  const [city, setCity] = useState();

  const handleSubmit = () => {
    console.log(id, name, city);

    const userInput = [...data, { id: id, name: name, city: city }];
    localStorage.setItem("user", JSON.stringify(userInput));
    setData(userInput);

    setId("");
    setName("");
    setCity("");
  };

  useEffect(() => {
    const dataObject = JSON.parse(data);
  }, [data]);
};

以下是你如何监听 localStorage: 如何在 react 中监听 localstorage 值的变化?