自定义Next.js挂接在呈现时刷新本地存储内存

jjjwad0x  于 2023-03-02  发布在  其他
关注(0)|答案(1)|浏览(112)

我创建了一个名为useLocalStorage的自定义Next.js钩子来持久化本地存储中的数据。它工作正常,就像当尝试更新数据时,本地存储也在更新,但本地存储内存在每次渲染时都会刷新。我如何防止这种行为?

import { SetStateAction, useEffect, useRef, useState } from "react";

function useLocalStorage(
  key: string,
  initialState: string
): [state: string, setState: React.Dispatch<SetStateAction<string>>] {
  const [state, setState] = useState<string>(initialState || "");

  useEffect(() => {
    let savedValue = localStorage.getItem(key);
    if (savedValue) {
      return setState(JSON.parse(savedValue));
    }
  }, []);

  useEffect(() => {
    localStorage.setItem(key, JSON.stringify(state));
  }, [state]);

  return [state, setState];
}

export default useLocalStorage;
neekobn8

neekobn81#

这可能是由于第一个useEffect挂接中的return语句。

useEffect(() => {
    let savedValue = localStorage.getItem(key);
    if (savedValue) {
      setState(JSON.parse(savedValue));
    }
  }, []);

useEffect回调内返回用于清理,如文档中所述:https://reactjs.org/docs/hooks-effect.html#effects-with-cleanup

相关问题