UseState异步执行问题

695 阅读1分钟

React中的setState是异步执行程序,主要是因为React使用的是合并更新,所以setState不能是同步执行。具体距举例来说:

const [num, setNum] = useState(0)

setNum(num+1)
console.log(num)

这个时候先打印出来的是0,然后再刷新打印出来的才是1。

关于异步和同步代码执行顺序,下面再举一个例子:

console.log('script start')
setTimeout(function() {
    console.log('setTimeout')
}, 0)
new Promise(function(resolve) {
    console.log('promise1')
    resolve()
    console.log('promise2')
}).then(function() {
    console.log('promise then')
})
console.log('script end')

最后输出结果是:

script start
promise1
promise2
script end
promise then
setTimeout

之所以promise1会在前面执行是因为虽然promise是异步函数,但那是对then而言,构建promise的过程是同步代码。后面的执行顺序不需要考虑。