suchen

Heim  >  Fragen und Antworten  >  Hauptteil

setInterval Unbegrenztes erneutes Rendern von React-Complete-Komponenten. Warum passiert das und wie kann man es beheben?

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粉978742405P粉978742405240 Tage vor486

Antworte allen(1)Ich werde antworten

  • P粉476046165

    P粉4760461652024-04-04 14:48:25

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

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

    export default function App() {
      const [seconds, setSeconds] = useState(5);
      const secondsRef = useRef(seconds);
    
      useEffect(() => {
        const interval = setInterval(() => {
          if (secondsRef.current < 0) {
            clearInterval(interval);
          }
    
          secondsRef.current = secondsRef.current - 1;
          setSeconds((seconds) => seconds - 1);
        }, 1000);
        return () => clearInterval(interval);
      }, []);
    
      console.log("running", new Date());
    
      return 

    {seconds < 0 ? "Time is up!" : seconds}

    ; }

    Antwort
    0
  • StornierenAntwort