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

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

React:番茄鐘:考慮到狀態(tài)的異步更新,如何正確更新?tīng)顟B(tài)?

React:番茄鐘:考慮到狀態(tài)的異步更新,如何正確更新?tīng)顟B(tài)?

慕桂英3389331 2023-03-24 13:55:06
在這個(gè) React Pomodoro Clock 中,有一個(gè)函數(shù)被稱為sessionIncrement()嘗試將 state 中的一個(gè)值更新為秒,然后立即通過(guò)轉(zhuǎn)換再次更新它。但是,轉(zhuǎn)換沒(méi)有任何效果,這似乎是因?yàn)闋顟B(tài)的異步性質(zhì)。任何幫助將不勝感激。索引.html<!DOCTYPE html><html dir="ltr"><head>  <meta charset="utf-8">  <title>25-5 Clock</title>  <style>  </style></head><body>  <main>    <div id="app"></app>    </main>  <script src="https://cdn.freecodecamp.org/testable-projects-fcc/v1/bundle.js"></script>  </body>  </html>
查看完整描述

1 回答

?
慕桂英4014372

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

通常我們?cè)噲D通過(guò)在一個(gè) setState 函數(shù)中更新?tīng)顟B(tài)來(lái)避免多次狀態(tài)調(diào)用。根據(jù)我的經(jīng)驗(yàn),我遇到了用當(dāng)前狀態(tài)更新我的狀態(tài)的問(wèn)題。(即不要使用this.state,盡量使用prevState)


/* We could use code like the following to update specific properties */

this.setState({ key1: newValue1, key3: newValue3 });

你的代碼


sessionIncrement() {

// same as decrement except does increment

    const toSeconds = () => {

        let sessionSeconds = this.state.sessionLength * 60;

        this.setState({ sessionSeconds: sessionSeconds }, () => console.log(this.state.sessionSeconds));

        this.setState({ timeLeft: sessionSeconds});

    }


// Convert to MM:SS

    const secondsToMins = (time) => {

        let converted = Math.floor(time / 60) + ':' + ('0' + Math.floor(time % 60)).slice(-2);

        return converted;

    }


    let time = this.state.sessionSeconds;

    let sessionLength = this.state.sessionLength + 1;

    this.setState({ sessionLength: sessionLength }, toSeconds);

    this.setState({ timeLeft: secondsToMins(time) }, () => console.log(this.state.timeLeft));

}

不確定你為什么要更新 timeLeft 兩次,所以我選擇用你更新它的最后一個(gè)值來(lái)更新 timeLeft。


使用一個(gè) setState:


this.setState(prevState => ({

    sessionLength: prevState.sessionLength+1,

    sessionSeconds: (prevState.sessionLength+1)*60,

    timeLeft:  secondsToMins((prevState.sessionLength+1)*60)}), callbackFunction

);

有關(guān)如何使用狀態(tài)的更多信息,請(qǐng)參閱文檔。


希望將所有狀態(tài)更新嵌套到一個(gè) setState 中將解決 setState 的問(wèn)題,并且它是異步的。


您還可以添加更多回調(diào)。


this.setState({}, func1, func2, func3);

or 

this.setState({}, () => {func1, func2, func3});


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

添加回答

舉報(bào)

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號(hào)

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