[React] State and Callbacks Don’t Mix Well in React

// Doesn't work

import React from 'react'
import { saveInfo } from './api'

export default function App() {
    const [count, setCount] = React.useState(0)
    
    async function onClick() {
        // because this is async api call
        // react will wait until this api resolve
        // during the waiting time, react component won't rerender
        // therefore count will be 1
        await saveInfo()
        setCount(count + 1)
    }
    
    return (
        <>
         <h1>Count: {count}</h1>
         <button onClick={onClick}>+1</button>
        </>
    )
}

 

Solution:

import React from 'react'
import { saveInfo } from './api'

export default function App() {
    const [count, setCount] = React.useState(0)
    
    async function onClick() {
        await saveInfo()
        setCount(count => count + 1)
    }
    
    return (
        <>
         <h1>Count: {count}</h1>
         <button onClick={onClick}>+1</button>
        </>
    )
}

 

Even better:

import React from 'react'
import { saveInfo } from './api'

export default function App() {
    const [count, setCount] = React.useState(0)
    const inc = () => setCount(count => count + 1)
    
    async function onClick() {
        await saveInfo()
        inc()
    }
    
    return (
        <>
         <h1>Count: {count}</h1>
         <button onClick={onClick}>+1</button>
        </>
    )
}

 

posted @   Zhentiw  阅读(11)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具
历史上的今天:
2021-12-21 [Reac] React 18
2019-12-21 [LeetCode] 832. Flipping an Image
2019-12-21 [LeetCode] 709. To Lower Case
2019-12-21 [LeetCode] 1221. Split a String in Balanced Strings
2019-12-21 [Algorithm] 1290. Convert Binary Number in a Linked List to Integer
2019-12-21 [LeetCode] 1281. Subtract the Product and Sum of Digits of an Integer
2018-12-21 [Algorithms] Sort an Array with a Nested for Loop using Insertion Sort in JavaScript
点击右上角即可分享
微信分享提示