
// This is a React Quiz from BFE.dev
import * as React from 'react'
import { useState } from 'react'
import { createRoot, flushSync } from 'react-dom/client'
import { screen, fireEvent } from "@testing-library/dom";
function App() {
const [state, setState] = useState(0)
const onClick = () => {
console.log('handler')
flushSync(() => {
setState(state => state + 1)
})
console.log('handler ' + state)
}
console.log('render ' + state)
return <div>
<button onClick={onClick}>click me</button>
</div>
}
const root = createRoot(document.getElementById("root"));
root.render(<App />);
(async function () {
const action = await screen.findByText('click me')
fireEvent.click(action);
})()
"render 0"
"handler"
"render 1"
"handler 0"
render 0 μΆλ ₯: root.render(<App />)κ° μ€νλλ©΄μ stateμ μ΄κΈ°κ°μΈ 0μΌλ‘ 첫 λ λλ§μ΄ μΌμ΄λ©λλ€.
handler μΆλ ₯: λ²νΌ ν΄λ¦ μ§ν onClick νΈλ€λ¬ λ΄μ 첫 λ²μ§Έ console.logκ° μ€νλ©λλ€.
render 1 μΆλ ₯: flushSync λ΄λΆμμ setStateκ° νΈμΆλλ©΄ Reactλ νΈλ€λ¬κ° λλκΈΈ κΈ°λ€λ¦¬μ§ μκ³ κ·Έ μ¦μ Appμ 리λ λλ§ν©λλ€. onClick ν¨μκ° λλκΈ°λ μ μ 리λ λλ§ console.logκ° λ¨Όμ μ°νλλ€.
handler 0 μΆλ ₯: 리λ λλ§μ λλ¬μ§λ§ onClick ν¨μ λ΄μ state λ³μλ ν΄λ‘μ νμ λλ¬Έμ μ¬μ ν ν¨μκ° μμλ λμ κ°μΈ 0μ μ°Έμ‘°ν©λλ€.