setInterval Unbegrenztes erneutes Rendern von React-Complete-Komponenten. Warum passiert das und wie kann man es beheben?
P粉978742405
P粉978742405 2024-04-03 15:39:05
0
1
399

Das ist mein Reaktionscode. Dadurch wird die Komponente unendlich oft neu gerendert:

const [seconds, setSeconds] = useState(60)
useEffect(() => {
    const interval = setInterval(() => {
        setSeconds(seconds => seconds - 1);
    }, 1000);
    return () => clearInterval(interval);
}, []);

console.log("object");

P粉978742405
P粉978742405

Antworte allen(1)
P粉476046165

发生这种情况是因为您仅在组件卸载时清除间隔,这仅在用户离开页面时才会发生。

也许这就是您所需要的?当间隔达到 0 时,我将清除它。但是为此我必须使用引用,我不能使用 setInterval 中的状态,因为它只有初始值:

export default function App() {
  const [seconds, setSeconds] = useState(5);
  const secondsRef = useRef(seconds);

  useEffect(() => {
    const interval = setInterval(() => {
      if (secondsRef.current  seconds - 1);
    }, 1000);
    return () => clearInterval(interval);
  }, []);

  console.log("running", new Date());

  return 

{seconds ; }

Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!