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的过程是同步代码。后面的执行顺序不需要考虑。