【发布时间】:2022-12-12 13:23:23
【问题描述】:
我正在构建一个游戏,我想将用户的输赢存储在浏览器的本地存储中。我有一个看起来像这样的简单组件:
import { useState, useEffect } from 'react';
const Game = () => {
const [wins, setWins] = useState(0);
const [losses, setLosses] = useState(0);
// Report wins to localStorage
useEffect(() => {
localStorage.setItem('wins', wins);
}, [wins]);
// Report losses to localStorage
useEffect(() => {
localStorage.setItem('losses', losses);
}, [losses]);
// Get any existing data in localStorage
useEffect(() => {
const winCount = localStorage.getItem('wins');
const lossCount = localStorage.getItem('losses');
winCount ? setWins(winCount) : setWins(0);
lossCount ? setLosses(lossCount) : setLosses(0);
}, []);
return (
<div className="game">
Wins: {wins} | Losses: {losses}
<-- Game Stuff Here -->
<-- Wins & Losses Get Incremented During Game -->
</div>
)
}
问题是在渲染时,前两个useEffect 运行并用零重置 localStorage。我知道有一个解决方法使用 useRef 来阻止 useEffect 在第一次渲染时运行,但感觉有点花哨。这是唯一的解决方案还是在渲染时不覆盖 localStorage 有更好的做法?
【问题讨论】:
标签: reactjs