iT邦幫忙

0

useState 即時傳值問題

  • 分享至 

  • xImage

onclick時 就點擊到顯示正確的值 這樣要怎麼改寫下面這段 感謝各位大大

const handleClick = () => {
    flushSync(() => {
      setCount(1);
    });
    console.log(count); //會得到0  期望值拿到1的話???
  };
janlin002 iT邦好手 1 級 ‧ 2023-02-15 17:08:56 檢舉
我這邊看是拿到1誒
Vader iT邦研究生 4 級 ‧ 2023-02-15 17:54:16 檢舉
https://codesandbox.io/s/epic-roentgen-hzs09m?file=/src/App.js

第一次還是0
mengke.me iT邦新手 5 級 ‧ 2023-03-10 11:15:00 檢舉
在React事件流中(如`onClick`等)`setState`和`useState`是异步执行的。
在`setTimeout`,`Promise`等异步事件中,是同步执行的。
所以当你点击后立即去获取的话获取到的是修改前的值。
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

2 個回答

1
harry xie
iT邦研究生 1 級 ‧ 2023-02-16 11:34:45
最佳解答

https://codesandbox.io/s/eager-hugle-q505zm

我這裡寫了個範例,提供給你參考~使用了 usestateref hook,話說是有什麼特殊需求會需要馬上拿到更新後的 state 值呢?

Vader iT邦研究生 4 級 ‧ 2023-02-16 11:40:08 檢舉

是監控機台 隨時數值跳動都需要傳訊息出來

harry xie iT邦研究生 1 級 ‧ 2023-02-16 14:02:28 檢舉

了解,那希望我的解答能幫到你~~

0
JamesDoge
iT邦高手 1 級 ‧ 2023-02-16 03:47:43
const handleClick = () => {
  setCount(1, () => {
    console.log(count); //這裡就會拿到更新後的值1
  });
};

harry xie iT邦研究生 1 級 ‧ 2023-02-16 11:32:50 檢舉

不好意思,但你這個做法會跳出警告

我要發表回答

立即登入回答