第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

React SetState 被忽略

React SetState 被忽略

慕后森 2023-02-17 10:04:58
我正在嘗試制作一個(gè)從 1.0 開(kāi)始并增加 0.1 直到達(dá)到隨機(jī)數(shù)的計(jì)時(shí)器。您必須在組件呈現(xiàn) 5 秒后啟動(dòng)“會(huì)話(huà)”,這一切都正常。問(wèn)題是我希望一個(gè)會(huì)話(huà)在另一個(gè)會(huì)話(huà)結(jié)束后 5 秒開(kāi)始,而 React 忽略了允許下一個(gè)會(huì)話(huà)的 setState,我不明白為什么。注意:只有當(dāng)我創(chuàng)建一個(gè)調(diào)用切換功能的按鈕 setIsGameActive(isGameActive => isGameActive = !isGameActive) 并單擊它時(shí)它才有效const GamePanel = () => {    const [gameTime, setGameTime] = useState(1);    const [isGameActive, setIsGameActive] = useState(false);    const [gameEndTime, setGameEndTime] = useState(0);    const [lastResults, setLastResults] = useState([]);    let randomNumber = 0;    const useFirstTime = useRef({firstTime: true});    const makeRandomNumber = (min, max) => {        return min + (max - min) * Math.random()    }   onst reset = () => {        setGameTime(1);        setIsGameActive(false); //ignored    }    const gameStart = () => {        if(useFirstTime.current.firstTime === false){            if(!isGameActive){                console.log("Game starting...");                randomNumber = makeRandomNumber(1.1, 5);                setGameEndTime(randomNumber.toFixed(1))                setIsGameActive(true);            }        }    }    const gameFinished = () => {        setTimeout(()=>{            reset();            gameStart()        }, 5000)    }    useEffect(() => {        if(useFirstTime.current.firstTime === true){            useFirstTime.current.firstTime = false;            setTimeout(() => {                gameStart();            }, 5000);        }        let interval = null;        if(isGameActive){            interval = setInterval(() => {                if(gameTime.toFixed(1) !== gameEndTime){                    setGameTime(gameTime => gameTime + 0.1)                }                if(gameTime.toFixed(1) === gameEndTime){                    clearInterval(interval)                    gameFinished();                }            }, 100);
查看完整描述

1 回答

?
開(kāi)心每一天1111

TA貢獻(xiàn)1836條經(jīng)驗(yàn) 獲得超13個(gè)贊

每次渲染組件時(shí)都會(huì)創(chuàng)建重置函數(shù)。因此,計(jì)時(shí)器內(nèi)部的重置引用與重新渲染后的組件本身不同。嘗試使用useCallback重置來(lái)創(chuàng)建函數(shù)的記憶版本:https://reactjs.org/docs/hooks-reference.html#usecallback


    const reset = useCallback(() => {

        setGameTime(1);

        setIsGameActive(false); //ignored

    },[])


查看完整回答
反對(duì) 回復(fù) 2023-02-17
  • 1 回答
  • 0 關(guān)注
  • 110 瀏覽
慕課專(zhuān)欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢(xún)優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)