Hooks里对state的更新,在同一个event handler里,是会batch的,即使有promise等async操作
const { useState, useEffect, } = React;function Test() {const [counter, setCounter] = useState(0);const [counter1, setCounter1] = useState(0);const [renderCnt, setRenderCnt] = useState(0);const handleClick = () => {setCounter(counter+1); // comment out this to see the diff action(new Promise((resolve) => setTimeout(() => {resolve()}, 1000))).then(res => {setCounter(counter+1);setCounter1(counter1+1)})};useEffect(() => {setRenderCnt(renderCnt + 1)}, [counter, counter1]); // here we also dep on counter1, the render will not be batched thoughreturn (<div><p>You clicked {counter} times</p><button onClick={handleClick}>Click me</button><p>Rendered {renderCnt} times</p></div>);}ReactDOM.render(<Test />, document.querySelector("#app"))
但是,render的话,却会因为async操作的存在而不能被batch。
