9. React Version
#
React Version 18#
๋ฆฌ์กํธ 18 ๋ฒ์ - ๋ฆฌ์กํธ 18์๋ ๋ฌด์์ด ์๋์?
- ๋ฆฌ์กํธ 18๋ก ์ด๋ป๊ฒ ์ ๊ทธ๋ ์ด๋ ํ ์์๋์?
#
๋ฆฌ์กํธ 18 ๋ฒ์ ์ ์๋ก์ด ๊ฒ์ ๋ฌด์์ธ๊ฐ์ ?!- Automatic batching
- Suspense on the server
- New APIs for app and library developers
- Transition
#
Automatic batching๋ฐฐ์นญ(batching) ์ ์ ๋ฐ์ดํธ ๋์์ด ๋๋ ์ํ๊ฐ๋ค์ ํ๋์ ๊ทธ๋ฃน์ผ๋ก ๋ฌถ์ด์ ํ๋ฒ์ ๋ฆฌ๋ ๋๋ง ์ ์ ๋ฐ์ดํธ๊ฐ ๋ชจ๋ ์งํ๋ ์ ์๊ฒ ํด์ฃผ๋ ๊ฒ์ ์๋ฏธํฉ๋๋ค. ํ ํจ์ ์์์ setState๋ฅผ ์๋ฌด๋ฆฌ ๋ง์ด ํธ์ถ์ํค๋๋ผ๋ ๋ฆฌ๋ ๋๋ง์ ๋จ ํ๋ฒ๋ง ๋ฐ์ํฉ๋๋ค.
ํจ์์ ๋์์ ์ ๋ฐ์ดํธ๊ฐ ๋๋ฉฐ ๋ฆฌ์กํธ๋ ๋ง์ง๋ง์ ํ๋ฒ๋ง ๋ฆฌ๋ ๋๋ง ํฉ๋๋ค. ์ด๊ฒ์ ์ฌ๋ฌ๋ฒ ๋ฆฌ๋ ๋๋ง์ ํ๋๊ฒ์ ๋ง๊ธฐ๋๋ฌธ์ ์ฑ๋ฅ์ ์ข์ ์ํฅ์ ์ค๋๋ค.
batch update๋ฅผ ์ฌ์ฉํจ์ผ๋ก ๋ถํ์ํ ๋ฆฌ๋ ๋๋ง์ ์ค์ผ ์ ์์ด์ ํผํฌ๋จผ์ค์ ์ผ๋ก ํฐ ์ด์ ์ ์ป ์ ์ ์๋๋ฐ์, ์ด์ ๋ฒ์ ์์๋ ์ด๋ฐ batch update๊ฐ ์ง์๋์์ง๋ง ํด๋ฆญ๊ณผ ๊ฐ์ ๋ธ๋ผ์ฐ์ ์ด ๋ฒคํธ์์๋ง ์ ์ฉ์ด ๊ฐ๋ฅํ๊ณ api ํธ์ถ์ ์ฝ๋ฐฑ์ผ๋ก ๋ฃ์ ํจ์๋ timeouts ํจ์์์๋ ์๋ํ์ง ์์์ต๋๋ค.
#
batch ์ฒ๋ฆฌํ์ง ์์ผ๋ ค๋ฉด ์ด๋ป๊ฒ ํฉ๋๊น?์ผ๋ฐ์ ์ผ๋ก ์ผ๊ด ์ฒ๋ฆฌ๋ ์์ ํ์ง๋ง ์ผ๋ถ ์ฝ๋๋ ์ํ ๋ณ๊ฒฝ ์งํ DOM์์ ๋ฌด์ธ๊ฐ๋ฅผ ์ฝ๋ ๋ฐ ์์กดํ ์ ์์ต๋๋ค. ์ด๋ฌํ ์ฌ์ฉ ์ฌ๋ก์ ๊ฒฝ์ฐ ReactDOM.flushSync()๋ฅผ ์ฌ์ฉํ์ฌ ์ผ๊ด ์ฒ๋ฆฌ๋ฅผ ์ตํธ์์ํ ์ ์์ต๋๋ค.
#
๋ฆฌ์กํธ 18 ๋ฒ์ ์์ Automatic batching- ๋ ๋์ ์ฑ๋ฅ์ ์ํ ๋ ์ ์ ๋ฆฌ ๋ ๋๋ง์ ํฉ๋๋ค.
- ์ด๋ฒคํธ ํธ๋ค๋ฌ ๋ฐ์์๋ ์๋
- ํ์ํ ๋๋ ์ ์ธํ ์ ์์ต๋๋ค
#
Suspense on the server (๊ฐ๋จํ๊ฒ)#
์๋ฒ ์ฌ์ด๋ ๋ ๋๋ง๋ฆฌ์ํธ์ ์๋ฒ์ฌ์ด๋ ๋ ๋๋ง์ ๋ค์์ ์คํ ์ผ๋ก ์ด๋ค์ง๋๋ค.
- ์๋ฒ์์ ์ ์ฒด ์ฑ์ ๋ํ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์ต๋๋ค.
- ๊ทธ๋ฐ ๋ค์ ์๋ฒ์์ ์ ์ฒด ์ฑ์ HTML๋ก ๋ ๋๋งํ๊ณ ์๋ต์ผ๋ก ๋ณด๋ ๋๋ค.
- ๊ทธ๋ฐ ๋ค์ ํด๋ผ์ด์ธํธ์์ ์ ์ฒด ์ฑ์ ๋ํ JavaScript ์ฝ๋๋ฅผ ๋ก๋ํฉ๋๋ค.
- ๊ทธ๋ฐ ๋ค์ ํด๋ผ์ด์ธํธ์์ JavaScript ๋ ผ๋ฆฌ๋ฅผ ์ ์ฒด ์ฑ์ ๋ํด ์๋ฒ ์์ฑ HTML์ ์ฐ๊ฒฐํฉ๋๋ค(์ด๊ฒ์ด "hydration"์ ๋๋ค).
Hydration์ Dryํ HTML์ ์๋ถ(Javascript) ๊ณต๊ธ์ ํ๋ ๊ฒ์ ๋๋ค.
#
์ฌ๊ธฐ์์ ๋ฌธ์ ์ ์ ๋ฌด์์ธ๊ฐ์?!!!- ํต์ฌ ๋ถ๋ถ์ ๋ค์ ๋จ๊ณ๊ฐ ์์๋๊ธฐ ์ ์ ๊ฐ ๋จ๊ณ๊ฐ ์ ์ฒด ์ฑ์ ๋ํด ํ ๋ฒ์ ์๋ฃ๋์ด์ผ ํ๋ค๋ ๊ฒ์ ๋๋ค.(๋๊ธฐ ๋ฐฉ์ ๋ฐ Waterfall ๋ฐฉ์) ๊ฑฐ์ ๋ชจ๋ ์ค์ํ์ง ์์ ์ฑ์ ๊ฒฝ์ฐ์ ๊ฐ์ด ์ฑ์ ์ผ๋ถ๊ฐ ๋ค๋ฅธ ๋ถ๋ถ๋ณด๋ค ๋๋ฆฐ ๊ฒฝ์ฐ ์ด๋ ํจ์จ์ ์ด์ง ์์ต๋๋ค.
- ์๋๋ฉด ํ ํ์ด์ง์ ์ฌ๋ฌ์ปดํฌ๋ํธ๊ฐ ์์ ๋ HTML ์์ฑ์ด ์ค๋ ๊ฑธ๋ฆฌ๋ ์ปดํฌ๋ํธ๊ฐ ์๊ณ , ๊ทธ๋ ์ง ์์ ์ปดํฌ๋ํธ๊ฐ ์๋๋ฐ ๋นจ๋ฆฌ ์์ฑ๋ ์ปดํฌ๋ํธ๊ฐ ๋ค๋ฅธ ์ปดํฌ๋ํธ๋ฅผ ์ํด์ ๊ณ์ ๊ธฐ๋ค๋ ค์ผ ํ๊ธฐ ๋๋ฌธ์ ๋นํจ์จ์ ์ด๊ฒ ๋ฉ๋๋ค.
#
๋ฆฌ์กํธ 18์์ Suspense๋ก ๋ฌธ์ ํด๊ฒฐํ๊ธฐ- React 18์ ์ฌ์ฉํ๋ฉด
<Suspense />
๋ฅผ ์ฌ์ฉํ์ฌ ์ฑ์ ๋ ์์ ๋ ๋ฆฝ ๋จ์๋ก ๋๋ ์ ์์ต๋๋ค. ์ด ๋จ์๋ ์๋ก ๋ ๋ฆฝ์ ์ผ๋ก ์ด๋ฌํ ๋จ๊ณ๋ฅผ ๊ฑฐ์น๋ฉฐ ์ฑ์ ๋๋จธ์ง ๋ถ๋ถ์ ์ฐจ๋จํ์ง ์์ต๋๋ค. - ๊ฒฐ๊ณผ์ ์ผ๋ก ์ฑ ์ฌ์ฉ์๋ ์ฝํ ์ธ ๋ฅผ ๋ ๋นจ๋ฆฌ ๋ณด๊ณ ํจ์ฌ ๋น ๋ฅด๊ฒ ์ํธ ์์ฉํ ์ ์์ต๋๋ค.
- ์ฑ์์ ๊ฐ์ฅ ๋๋ฆฐ ๋ถ๋ถ์ ๋น ๋ฅธ ๋ถ๋ถ์ ๋์ด๋ด๋ฆฌ์ง ์์ต๋๋ค. ์ด๋ฌํ ๊ฐ์ ์ฌํญ์ ์๋์ด๋ฉฐ ์๋ํ๊ธฐ ์ํด ํน๋ณํ ์กฐ์ ์ฝ๋๋ฅผ ์์ฑํ ํ์๊ฐ ์์ต๋๋ค.
#
Suspense on the server (์์ธํ๊ฒ)#
์๋ฒ ๋ ๋๋ง์ ์ฅ์ - ์๋ฒ ๋ ๋๋ง์ ํ์ง ์์ ๋๋ ์๋ฐ์คํฌ๋ฆฝํธ๊ฐ ๋ก๋๋๊ธฐ ์ ๊น์ง๋ ์๋ฌด๊ฒ๋ ๋ณผ ์๊ฐ ์์ต๋๋ค.
- ํ์ง๋ง ์๋ฒ ๋ ๋๋ง์ ํ๋ฉด ์๋ฐ์คํฌ๋ฆฝํธ๊ฐ ๋ก๋๋๊ธฐ ์ ์๋ ๋ฒํผ์ ํด๋ฆญํ๊ฑฐ๋ ์ํธ์์ฉํ ์ ์๋ ๋ถ๋ถ์ ์ฌ์ฉํ์ง ๋ชปํ์ง๋ง ์๋ฐ์คํฌ๋ฆฝํธ๊ฐ ๋ก๋๋๋ ๊ณผ์ ์์๋ ์ ์ ์ธ ํ์ผ๋ค์ ํ๋ฉด์ ๋ณด์ฌ์ค ์๊ฐ ์์ต๋๋ค. ๊ทธ๋์ ๋คํธ์ํฌ๊ฐ ๋๋ฆฐ ์ปดํจํฐ๋ ๋น ๋ฅด๊ฒ ํ๋ฉด์ ๋ณผ ์ ์์ต๋๋ค.
#
์ค๋๋ ์๋ฒ ๋ ๋๋ง์ ๋จ์ ์ ?- ์ด๋ ํ ๊ฒ์ ๊ฐ์ ธ์ค๊ธฐ ์ํด์ ๋ชจ๋ ๊ฒ์ Fetch ํด์ค์ผ ํฉ๋๋ค.
- Hydrate ์ ํ๊ธฐ ์ ์ ๋ชจ๋ ๊ฒ์ ๋ก๋ํด์ผ ํฉ๋๋ค.
- ์ด๋ค ๊ฒ๊ณผ๋ ์ํธ ์์ฉํ๊ธฐ ์ ์ ๋ชจ๋ ๊ฒ์ Hydrate ํด์ผ ํฉ๋๋ค.
๊ฒฐ๊ตญ All or Nothing !!!
#
์ด๋ฌํ ๋ฐฉ๋ฒ์ ํด๊ฒฐํ๊ธฐ ์ํด์ React 18์์ ํ๋ ๊ฒ์ ?- Streaming HTML (Server)
- Selective Hydration (Client)
#
๋ชจ๋ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์ค๊ธฐ ์ ์ HTML ์คํธ๋ฆฌ๋ฐํ๋ ๋ฐฉ๋ฒ- renderToString ๋์ ์ renderToPipeableStream ๋ฉ์๋๋ฅผ ์ฌ์ฉ
<Suspense>
๋ก<Comments>
๋ฅผ ๊ฐ์ธ๋ฉด React๊ฐ ํ์ด์ง์ ๋๋จธ์ง ๋ถ๋ถ์ ๋ํด HTML ์คํธ๋ฆฌ๋ฐ์ ์์ํ ๋๊น์ง ๊ธฐ๋ค๋ฆด ํ์๊ฐ ์๋ค๊ณ React์ ์๋ฆฝ๋๋ค. ๋์ React๋ ์ฃผ์ ๋์ ์๋ฆฌ ํ์์(์คํผ๋)๋ฅผ ๋ณด๋ ๋๋ค.- ์ดํ์ ๋๊ธ ๋ฐ์ดํฐ๊ฐ ์๋ฒ์์ ์ค๋น๋๋ฉด React๋ ์ถ๊ฐ HTML์ ๋์ผํ ์คํธ๋ฆผ์ ๋ณด๋ด๊ณ ํด๋น HTML์ "์ฌ๋ฐ๋ฅธ ์์น"์ ๋ฃ๊ธฐ ์ํ ์ต์ํ์ ์ธ๋ผ์ธ
<script>
ํ๊ทธ๋ฅผ ๋ณด๋ ๋๋ค. - ๊ฒฐ๊ณผ์ ์ผ๋ก React ์์ฒด๊ฐ ํด๋ผ์ด์ธํธ์ ๋ก๋๋๊ธฐ ์ ์๋ ๋ค๋ฆ์ ๋๊ธ HTML์ด "ํ์ "๋ฉ๋๋ค.
- ์ด๊ฒ์ ์ฐ๋ฆฌ์ ์ฒซ ๋ฒ์งธ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํฉ๋๋ค. ์ด์ ์๋ฌด๊ฒ๋ ํ์ํ๊ธฐ ์ ์ ๋ชจ๋ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์ฌ ํ์๊ฐ ์์ต๋๋ค. ํ๋ฉด์ ์ผ๋ถ๊ฐ ์ด๊ธฐ HTML์ ์ง์ฐ์ํค๋ ๊ฒฝ์ฐ ๋ชจ๋ HTML์ ์ง์ฐํ๊ฑฐ๋ HTML์์ ์ ์ธํ ์ง ์ ํํ ํ์๊ฐ ์์ต๋๋ค. ๋์ค์ HTML ์คํธ๋ฆผ์์ ํด๋น ๋ถ๋ถ์ด "Pop in"๋๋๋ก ํ์ฉํ ์ ์์ต๋๋ค.
- ๊ธฐ์กด HTML ์คํธ๋ฆฌ๋ฐ๊ณผ ๋ฌ๋ฆฌ ํํฅ์(top-down) ์์๋ก ๋ฐ์ํ ํ์๊ฐ ์์ต๋๋ค.
#
๋ชจ๋ ์ฝ๋๊ฐ ๋ก๋๋๊ธฐ ์ ์ Hydrate ํ๋ ๋ฐฉ๋ฒ- ํ์ฌ๋ ์ด๊ธฐ HTML์ ๋ ์ผ์ฐ ๋ณด๋ผ ์ ์์ง๋ง ์ฌ์ ํ ๋ฌธ์ ๊ฐ ์์ต๋๋ค. ๋๊ธ ์์ ฏ์ ๋ํ JavaScript ์ฝ๋๊ฐ ๋ก๋๋ ๋๊น์ง ํด๋ผ์ด์ธํธ์์ ์ฑ์ Hydrate ์ ์์ํ ์ ์์ต๋๋ค. ์ฝ๋ ํฌ๊ธฐ๊ฐ ํฌ๋ฉด ์๊ฐ์ด ๊ฑธ๋ฆด ์ ์์ต๋๋ค.
- ํฐ ๋ฒ๋ค์ ํผํ๊ธฐ ์ํด ์ผ๋ฐ์ ์ผ๋ก "์ฝ๋ ๋ถํ "์ ์ฌ์ฉํฉ๋๋ค. ์ฝ๋ ์กฐ๊ฐ์ ๋๊ธฐ์ ์ผ๋ก ๋ก๋ํ ํ์๊ฐ ์๋๋ก ์ง์ ํ๋ฉด ๋ฒ๋ค๋ฌ๊ฐ ์ด๋ฅผ ๋ณ๋์
<script>
ํ๊ทธ๋ก ๋ถํ ํฉ๋๋ค. - React.lazy๋ก ์ฝ๋ ๋ถํ ์ ์ฌ์ฉํ์ฌ ๊ธฐ๋ณธ ๋ฒ๋ค์์ ๋๊ธ ์ฝ๋๋ฅผ ๋ถํ ํ ์ ์์ต๋๋ค.
- ์ด์ ์๋ ์ด ๋ฐฉ๋ฒ์ ์๋ฒ ๋ ๋๋ง์์ ์๋ํ์ง ์์์ต๋๋ค.
React.lazy
- ํด๋ผ์ด์ธํธ ์ฌ์ด๋ ๋ ๋๋ง ๋จ๊ณ์์ ํฐ ๋ฒ๋ค์ ์๋ฐ์คํฌ๋ฆฝํธ ์ฝ๋๋ค์ ์์ ์ฒญํฌ๋ค๋ก ๋๋์ด ๋ก๋๋ ์ ์๊ฒ ํด์ฃผ๋ ์ญํ (๋ฆฌ์กํธ 18๋ถํฐ๋ ์๋ฒ ์ฌ์ด๋์์๋ ๊ฐ๋ฅ)
#
์๋ฒ ๋ ๋๋ง์์ ์์ฐจ์ ์ผ๋ก Hydrating ํ๋ ์์- HTML์ด ์์ฐจ์ ์ผ๋ก ์คํธ๋ฆฌ๋ฐ๋๊ณ ๋ ๋๋งํ๋ ๋น์ฉ์ด ํฐ ์ปดํฌ๋ํธ๋ค์
<Suspense>
๋ก ๊ฐ์์ผ๋ก ์ธํด ํด๋น ๋ถ๋ถ์ด ์ฌ์ ํ ํด๋ฐฑ ์๋ฆฌ๋จผํธ๋ฅผ ๋ด๋ณด๋ด๊ณ ์์ด๋ ๊ทธ์ ์๊ด์์ด ํ์ด์ง์ ๋ค๋ฅธ ๋ถ๋ถ์ Hydrating์ ์งํํฉ๋๋ค. - ๋๋จธ์ง ๋ถ๋ถ ๊น์ง HTML ์คํธ๋ฆฌ๋ฐ ๋ ํ JS ๋ฒ๋ค์ด ๋ก๋๋ ์ปดํฌ๋ํธ ๋ค์ ๊ทธ ๋ถ๋ถ ๋ํ Hydrating ํด์ค๋๋ค.
- ์ฌ์ฉ์์ ์ธํฐ๋ ์ ์ ๋ฐ๋ผ ์ด๋ค ๊ฒ์ ๋จผ์ hydration์ํฌ์ง์ ๋ํ ์ฐ์ ์์๋ฅผ ์ ํ ์ ์๊ฒ ๋์์ต๋๋ค. React๋ ํด๋ฆญ์ด ๋ฐ์ํ์์ ๊ธฐ๋กํ๊ณ ๋์ ๋ ๊ธด๊ธํ๊ธฐ ๋๋ฌธ์ ๋๊ธ์ ์ฐ์ ์์๋ฅผ ๋ถ์ฌํฉ๋๋ค
#
Transition#
startTransition- React 18์์๋ ์ ๋ฐ์ดํธ ์ค์๋ ์ฑ์ ์๋ต์ฑ์ ์ ์งํ๋ ๋ฐ ๋์์ด ๋๋ ์๋ก์ด API๋ฅผ ๋์ ํฉ๋๋ค. ์ด ์๋ก์ด API๋ฅผ ์ฌ์ฉํ๋ฉด ํน์ ์ ๋ฐ์ดํธ๋ฅผ "Transition"์ผ๋ก ํ์ํ์ฌ ์ฌ์ฉ์ ์ํธ ์์ฉ์ ํฌ๊ฒ ๊ฐ์ ํ ์ ์์ต๋๋ค.
- React๋ฅผ ์ฌ์ฉํ๋ฉด ์ํ ์ ํ ์ค์ ์๊ฐ์ ํผ๋๋ฐฑ์ ์ ๊ณตํ๊ณ ์ ํ์ด ๋ฐ์ํ๋ ๋์ ๋ธ๋ผ์ฐ์ ์ ์๋ต์ฑ์ ์ ์งํ ์ ์์ต๋๋ค.
- ์ด ๊ธฐ๋ฅ์ ๋ฆฌ์กํธ์์ ์ด๋ ํ ์ ๋ฐ์ดํธ๊ฐ Urgent ํ๋ฉฐ ์ด๋ ํ๊ฒ ๊ทธ๋ฌํ์ง ์์์ง ์๋ ค์ค๋๋ค. ๊ทธ๋์ ์ํ ์ ๋ฐ์ดํธ๋ฅผ ํ๋๋ฐ ์ฐ์ ์์๋ฅผ ์ฃผ๊ฒ ๋ฉ๋๋ค.
- ๋ํ์ ์ผ๋ก ๊ฒ์ ๊ธฐ๋ฅ์ ๊ตฌํํ ๋ ๊ฒ์ํ๋ Input ์ ์ด๋ฒคํธ์ ๋ฐ๋ผ์ ๋ฆฌ๋ ๋๋ง์ด ํด๋นํ๋ฉด์ ์ ๋ฐ์ดํธ ๋์ด์ผํฉ๋๋ค. ํ์ง๋ง ๊ทธ ์๋ ๊ฒ์ ๊ฒฐ๊ณผ๋ ์ด์ ๋ฐ๋ผ ์ ๋ฐ์ดํธ๊ฐ ๋๋๋ฐ ๊ฒ์ ๊ฒฐ๊ณผ ๋ฆฌ์คํธ๊ฐ ๋ง์ง ์๋๋ผ๋ ๋ด๋ถ์ ์ผ๋ก ๊ฒ์ ๊ฒฐ๊ณผ๋ฅผ ๊ฐ์ ธ์ค๋๋ฐ ๋ง์ ์์ ์ ์งํํ ์ ์๊ธฐ์ ๊ฒ์์ฐฝ์ ํ์ดํ์ ํ๋๊ฒ์ ๋ฐ๋ผ ๋ฐ๋ก ๋ฐ๋ก ๊ฒ์ ๊ฒฐ๊ณผ๋ ์ ๋ฐ์ดํธ๋ฅผ ํ๋ฉด ์ฑ๋ฅ์ ๋ฌธ์ ๊ฐ ์๊ธธ์ ์์ต๋๋ค.
- ๊ทธ๋ฌํ๊ธฐ์ ์ด ๋ถ๋ถ์ ๊ฒ์ ์ฐฝ๊ณผ ๊ฒฐ๊ณผ ์ฐฝ ๋ ๋ถ๋ถ์ผ๋ก ๋๋ ์ ์์ผ๋ฉฐ, ์ ์ ๊ฐ ํ์ดํํ๋ ๊ฒ์ ๋ฐ๋ผ ์ฆ๊ฐ ๋ฐ์๋๊ธฐ๋ฅผ ๊ธฐ๋ํ๋ ๊ฒ์์ฐฝ, ๊ทธ๋ฆฌ๊ณ ๊ฒ์ ์ฐฝ๋ณด๋ค๋ UI ์ ๋ฐ์ดํธ๊ฐ ๋๋ฆฐ ๊ฒ์ ์์ฐ์ค๋ฝ๊ฒ ๋ฐ์๋ค์ฌ์ ธ์ผ ํ๋ ๊ฒฐ๊ณผ ์ฐฝ์ผ๋ก ๋๋์ ์์ต๋๋ค.
#
Urgent Updates, ๊ฒ์ ์ฐฝ- ๋ฒํผ ํด๋ฆญ, ํค๋ณด๋ ์ ๋ ฅ๊ณผ ๊ฐ์ด ์ง๊ด์ ์ผ๋ก ๋ณด์์ ๋ ์ ๋ฐ์ดํธ๊ฐ ์ฆ๊ฐ์ ์ผ๋ก ์ผ์ด๋๋ ๊ฒ์ ๊ธฐ๋ํ๋ ์ํ ๊ฐ๋ค์ ๋์์ผ๋ก ํฉ๋๋ค.
#
Transition Updates, ๊ฒฐ๊ณผ ์ฐฝ- ์ฌ์ฉ์๊ฐ ์ํ ๊ฐ์ ๋ณํ์ ๋ฐ๋ฅธ ๋ชจ๋ ์ ๋ฐ์ดํธ๊ฐ ๋ทฐ์ ์ฆ๊ฐ์ ์ผ๋ก ์ผ์ด๋๋ ๊ฒ์ ๊ธฐ๋ํ์ง ์์ต๋๋ค.
#
์ด๋ป๊ฒ ์ด๋ฌํ ๋ฌธ์ ์ ์ ๊ฐ์ ํ ์ ์๋์?- ์๋ก์ด startTransition API๋ ์ ๋ฐ์ดํธ๋ฅผ "Transition"์ผ๋ก ํ์ํ ์ ์๋ ๊ธฐ๋ฅ์ ์ ๊ณตํ์ฌ ์ด๋ฌธ์ ๋ฅผ ํด๊ฒฐํฉ๋๋ค. ์ด API๋ก ๋ฆฌ์กํธ์๊ฒ ์ํ ์ ๋ฐ์ดํธํ๋๋ฐ ์ฐ์ ์์๋ฅผ ์ ํด์ฃผ๋ ๊ฒ์ ๋๋ค.
- startTransition์ ๋ํ๋ ์ ๋ฐ์ดํธ๋ ๊ธด๊ธํ์ง ์์ ๊ฒ์ผ๋ก ์ฒ๋ฆฌ๋๋ฉฐ ํด๋ฆญ์ด๋ ํค ๋๋ฆ๊ณผ ๊ฐ์ ๋ ๊ธด๊ธํ ์ ๋ฐ์ดํธ๊ฐ ๋ค์ด์ค๋ ๊ฒฝ์ฐ ์ค๋จ๋ฉ๋๋ค. ์ ํ์ด ์ฌ์ฉ์์ ์ํด ์ค๋จ๋๋ฉด(์: ์ฌ๋ฌ ๋ฌธ์๋ฅผ ์ฐ์์ผ๋ก ์ ๋ ฅ) React๋ ๋ค์์ throwํฉ๋๋ค. ์๋ฃ๋์ง ์์ ์ค๋๋ ๋ ๋๋ง ์์ ์ ์ ๊ฑฐํ๊ณ ์ต์ ์ ๋ฐ์ดํธ๋ง ๋ ๋๋งํฉ๋๋ค.
- Transition์ ์ฌ์ฉํ๋ฉด UI๊ฐ ํฌ๊ฒ ๋ณ๊ฒฝ๋๋๋ผ๋ ๋๋ถ๋ถ์ ์ํธ ์์ฉ์ ๋น ๋ฅด๊ฒ ์ ์งํ ์ ์์ต๋๋ค. ๋ํ ๋ ์ด์ ๊ด๋ จ์ด ์๋ ์ฝํ ์ธ ๋ฅผ ๋ ๋๋งํ๋ ๋ฐ ์๊ฐ์ ๋ญ๋นํ์ง ์์๋ ๋ฉ๋๋ค.
#
Transition์ด ๋ณด๋ฅ ์ค์ธ ๋์ ์ด๋ป๊ฒ ํด์ผ ํฉ๋๊น?- ๊ฒ์ ์ฐฝ์ ํ์ดํ์ ํ์ ๋ startTransition API๋ก ์ธํด ๊ฒฐ๊ณผ ์ฐฝ์๋ UI ์ ๋ฐ์ดํธ ์ฐ์ ์์๊ฐ ๋ฐ๋ ค์ ์ ๋ฐ์ดํธ ๋ณด๋ฅ๊ฐ ์ผ์ด๋ ๋๋ ์๋์ ๊ฐ์ด isPending์ด true๋ก ๋๊ธฐ์ isPending์ด true์ผ ์์ Spinner ๊ฐ์ ์ปดํฌ๋ํธ๋ฅผ ๋ณด์ฌ์ฃผ๋ฉด ๋ฉ๋๋ค.
#
๋ฆฌ์กํธ 18 ์ด์ ์๋ ์ด๋ป๊ฒ ์ด๋ฌํ ๋ฌธ์ ๋ฅผ ์ฒ๋ฆฌํ๋์?startTransition์ด ์์ ๋๋
- State๋ฅผ ๋ ๊ฐ๋ก ๋๋ ์ ๋ฐ๋ก ์ฒ๋ฆฌ๋ฅผ ํด์ฃผ๊ฑฐ๋ state๊ฐ ๋ ๊ฐ๋ ์ ๋ฐ์ดํธ ์ฒ๋ฆฌ ๋ฐฉ๋ฒ์ ๋ค๋ฅด๊ฒ ํด ์ค
- debounce๋ฅผ ์ด์ฉํด์ ์ฒ๋ฆฌํ๊ฑฐ๋
- setTimeout์ ์ด์ฉํด์ ์ฒ๋ฆฌํ์ต๋๋ค.
- debounce ๋ฅผ ์ด์ฉํ๊ฑฐ๋ setTimeout ์ ์ด์ฉํ๋ ๊ฒ์ ๊ฒฐ๊ตญ ๋ชจ๋ ์ด๋ฒคํธ๊ฐ Schedule ๋์ด์๊ณ ๋ค๋ก ๋ฐ๋ฆฌ๋ ๊ฒ์ด๊ธฐ ๋๋ฌธ์ ์ด๋ฒคํธ๊ฐ ๋๋๋ ๊ณ์ ๊ฒฐ๊ณผ๋ฅผ ํ์ถํ๊ฒ ๋ฉ๋๋ค.
#
React Version 18๋ก ์ ๊ทธ๋ ์ด๋ ํ๊ธฐ#
๋ฆฌ์กํธ ๋ฒ์ 18๋ก ์ ๊ทธ๋ ์ด๋ ํ๋ ๋ฐฉ๋ฒ- react์ react-dom์ npm ์ผ๋ก ๋ถํฐ ์ค์นํ๊ธฐ
npm install react react-dom
ReactDOM.render ====> ReactDOM.createRoot
๋ณ๊ฒฝํ๊ธฐ