我无法获取 localStorage 数据,我正在使用 useEffect Hook

I cant get the localStoarge data, i'm using useEffect Hook

每次我尝试刷新页面时,它 returns 为 0。 当匹配等于 6 时,我从轮流中获取 bestScore, 所以基本上每次匹配的牌达到 6 时,它都会从回合中获取 bestScore 并将 bestScore 保存到 localStoarge 并且它有效但是当我尝试刷新它时

 function App() {
      const [cards, setCards] = useState([]);
      const [turns, setTurns] = useState(0);
      const [match, matchedCards] = useState(0);
        const [bestScore, setBestScore] = useState(
    localStorage.getItem("highestScoresss")
  );
  const [choiceOne, setChoiceOne] = useState(null); //Kullanici 1.karta basinca setChoiceOne o karti alacak ve guncelliyecek
  const [choiceTwo, setChoiceTwo] = useState(null); //Kullanici 2.karta basinca setChoiceTwo o karti alacak ve guncelliyecek
  const [disabled, setDisabled] = useState(false);
  useEffect(() => {
    if (match === 6) {
      const highScore = Math.min(turns, bestScore);
      setBestScore(highScore);
      setBestScore(turns);
    } else {
      console.log("false");
    }
  }, [turns]);
  useEffect(() => {
    localStorage.setItem("highestScoresss", JSON.stringify(bestScore));
  });

这就是 JSX

<div className="bilgi">
        <p>Sıra: {turns}</p>
        <p>Bulunan: {match}</p>
        <p>En iyi Skor: {bestScore}</p>
        <button onClick={shuffleCards}>Yeni Oyun</button>
      </div>
    </div>

查看代码图像后,我认为您希望使用密钥 highestScores.

在本地存储中设置 bestScore

您当前的 useEffect 挂钩实现缺少依赖项数组。您希望每次设置新的 bestScore 时更新 localStorage。 为此,将 bestScore 添加到依赖项数组。

useEffect(() => /* YOUR OPERATION*/, [any_dependency])

此外,我建议您再次查看您的第一个 useEffect 实现。您似乎将 bestScore 状态设置了两次。一次 highScore 然后 turns.

推荐阅读

您实施的问题是您首先将状态设置为 0 ,然后是 useEffect 挂钩运行并将 localStorage 设置为状态值。

如果您可能将状态初始化为存储在 localStorage 中的值,那么我建议使用惰性初始化函数,这样初始状态值设置为 初始渲染之前并消除需要额外的 useEffect 挂钩来设置存储状态。这从 localStorage 和 returns 读取解析值,或者 0 如果解析结果为 null 或未定义。

const initializeState = () => {
  return JSON.parse(localStorage.getItem("highestScoresss")) ?? 0;
};

...

const [bestScore, setBestScore] = useState(initializeState());

您将希望在 useEffect 上使用一个依赖数组,该数组在 localStorage 中保留“highestScoresss”值,这样它仅在 bestScore 状态值更新和 不是 在每个渲染上。

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