ReactDOMClient
react-dom/client
ํจํค์ง๋ ํด๋ผ์ด์ธํธ์์ ์ ํ๋ฆฌ์ผ์ด์
์ ์ด๊ธฐํํ ๋ ์ฌ์ฉํ ์ ์๋ ํด๋ผ์ด์ธํธ ํนํ ํจ์๋ค์ ์ ๊ณตํฉ๋๋ค. ๋๋ถ๋ถ์ ์ปดํฌ๋ํธ์ ๊ฒฝ์ฐ ์ด ๋ชจ๋์ด ํ์ํ์ง ์์ ๊ฒ์
๋๋ค.
import * as ReactDOM from 'react-dom/client';
npm๊ณผ ํจ๊ป ES5๋ฅผ ์ฌ์ฉ ์ค์ด๋ผ๋ฉด, ๋ค์๊ณผ ๊ฐ์ด ์์ฑํฉ๋๋ค.
var ReactDOM = require('react-dom/client');
๊ฐ์
๋ค์ ํจ์๋ค์ ํด๋ผ์ด์ธํธ ํ๊ฒฝ์์ ์ฌ์ฉํ ์ ์์ต๋๋ค.
๋ธ๋ผ์ฐ์ ์ง์
React๋ ๋ชจ๋ ์ต์ ๋ธ๋ผ์ฐ์ ๋ค์ ์ง์ํ๋ฉฐ, ๊ตฌ๋ฒ์ ์ ํด๋ฆฌํ์ด ํ์ํฉ๋๋ค.
์ฃผ์
React๋ Internet Explorer์ ๊ฐ์ด ES5 ํจ์ ๋๋ ๋ง์ดํฌ๋กํ์คํฌ๋ฅผ ์ง์ํ์ง ์๋ ๊ตฌํ ๋ธ๋ผ์ฐ์ ๋ฅผ ์ง์ํ์ง ์์ต๋๋ค. ์ฌ๋ฌ๋ถ์ ์ ํ๋ฆฌ์ผ์ด์ ์ด es5-shim ๋๋ es5-sham๊ณผ ๊ฐ์ ํด๋ฆฌํ์ ํ์ด์ง ๋ด ํฌํจํ ๊ฒฝ์ฐ ๊ตฌํ ๋ธ๋ผ์ฐ์ ์์๋ ๋์ํ ์ ์๊ฒ ์ง๋ง, ์ด๋ฌํ ๋ฐฉ์์ ์ ํํ๋ค๋ฉด ๋ ์ด์ ๋์์ ๋๋ฆด ์ ์์ต๋๋ค.
์ฐธ์กฐ
createRoot()
createRoot(container[, options]);
์ฃผ์ด์ง container
์ ๋ํด React ๋ฃจํธ๋ฅผ ๋ง๋ค๊ณ ํด๋น ๋ฃจํธ๋ฅผ ๋ฐํํฉ๋๋ค. ๋ฐํ๋ ๋ฃจํธ๋ก render
๋ฅผ ํตํด React ์๋ฆฌ๋จผํธ๋ฅผ DOM์ผ๋ก ๋ ๋๋งํ ์ ์์ต๋๋ค.
const root = createRoot(container);
root.render(element);
createRoot
๋ ๋ ๊ฐ์ง ๋งค๊ฐ๋ณ์๋ฅผ ์ ํํ ์ ์์ต๋๋ค.
onRecoverableError
: React๊ฐ ์๋์ผ๋ก ์ค๋ฅ์์ ๋ณต๊ตฌ๋์์ ๊ฒฝ์ฐ ์ ํ์ ๋ฐ๋ผ ์ฝ๋ฐฑ์ด ํธ์ถ๋ฉ๋๋ค.identifierPrefix
: React๊ฐReact.useId
์ ์ํด ์์ฑ๋ ID๋ฅผ ์ ํ์ ๋ฐ๋ผ ์์ ๋ง๋ถ์ ๋๋ค. ๋์ผ ํ์ด์ง์ ์ฌ๋ฌ ๋ฃจํธ๋ฅผ ์ฌ์ฉํ ๋ ๋ฐ์ํ ์ ์๋ ์ถฉ๋์ ํํผํ๋ ๋ฐ ์ ์ฉํฉ๋๋ค. ์๋ฒ์์ ์ฌ์ฉํ ์ ๋์ฌ(Prefix)์ ๋ฐ๋์ ๋์ผํด์ผ ํฉ๋๋ค.
์์ฑ๋ ๋ฃจํธ๋ unmount
๋ก ๋ง์ดํธ ํด์ ํ ์ ์์ต๋๋ค.
root.unmount();
์ฃผ์
createRoot()
๋ ๋๊ฒจ๋ฐ์ ์ปจํ ์ด๋ ๋ ธ๋์ ์ปจํ ์ธ ๋ค์ ์ ์ดํฉ๋๋ค. ๋ด๋ถ์ ์กด์ฌํ๋ ๋ชจ๋ DOM ์๋ฆฌ๋จผํธ๋ ๋ ๋๋ง์ด ํธ์ถ๋๋ฉด ์ ๋ถ ๊ต์ฒด๋ฉ๋๋ค. ์ดํ์ ํธ์ถ๋ค์ ํจ์จ์ ์ธ ๊ฐฑ์ ์ ์ํด React์ DOM ๋น๊ต ์๊ณ ๋ฆฌ์ฆ์ ์ฌ์ฉํฉ๋๋ค.
createRoot()
๋ ๋๊ฒจ๋ฐ์ ์ปจํ ์ด๋ ๋ ธ๋๋ฅผ ์์ ํ์ง ์์ผ๋ฉฐ, ์ค์ง ๊ทธ ์์๋ง์ ์์ ํฉ๋๋ค. ๊ธฐ์กด DOM ๋ ธ๋์ ์ด๋ฏธ ์กด์ฌํ๋ ์์์ ๋ํด ๋ฎ์ด์ฐ๊ธฐ ์์ด ์ปดํฌ๋ํธ๋ฅผ ์ถ๊ฐํ๋ ๊ฒ์ด ๊ฐ๋ฅํ ์๋ ์์ต๋๋ค.์๋ฒ ๋ ๋๋ง๋(server-rendered) ์ปจํ ์ด๋๋ฅผ hydrate ํ๊ธฐ ์ํด
createRoot()
๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ ์ง์ํ์ง ์๋ ๋ฐฉ๋ฒ์ ๋๋ค. ๋์hydrateRoot()
๋ฅผ ์ฌ์ฉํ์ธ์.
hydrateRoot()
hydrateRoot(container, element[, options])
createRoot()
๊ณผ ๋์ผํ์ง๋ง, HTML ์ปจํ
์ธ ๊ฐ ReactDOMServer
๋ก ๋ ๋๋ง๋ ์ปจํ
์ด๋๋ฅผ hydrate ํ ๋ ์ฌ์ฉํฉ๋๋ค. React๋ ๊ธฐ์กด ๋งํฌ์
์ ์ด๋ฒคํธ ๋ฆฌ์ค๋๋ฅผ ์ฐ๊ฒฐํ๋ ค ์๋ํ ๊ฒ์
๋๋ค.
hydrateRoot
๋ ๋ ๊ฐ์ง ๋งค๊ฐ๋ณ์๋ฅผ ์ ํํ ์ ์์ต๋๋ค.
onRecoverableError
: React๊ฐ ์๋์ผ๋ก ์ค๋ฅ์์ ๋ณต๊ตฌ๋์์ ๊ฒฝ์ฐ ์ ํ์ ๋ฐ๋ผ ์ฝ๋ฐฑ์ด ํธ์ถ๋ฉ๋๋ค.identifierPrefix
: React๊ฐReact.useId
์ ์ํด ์์ฑ๋ ID๋ฅผ ์ ํ์ ๋ฐ๋ผ ์์ ๋ง๋ถ์ ๋๋ค. ๋์ผ ํ์ด์ง์ ์ฌ๋ฌ ๋ฃจํธ๋ฅผ ์ฌ์ฉํ ๋ ๋ฐ์ํ ์ ์๋ ์ถฉ๋์ ํํผํ๋ ๋ฐ ์ ์ฉํฉ๋๋ค. ์๋ฒ์์ ์ฌ์ฉํ ์ ๋์ฌ(Prefix)์ ๋ฐ๋์ ๋์ผํด์ผ ํฉ๋๋ค.
์ฃผ์
React๋ ๋ ๋๋ง๋ ์ปจํ ์ธ ๊ฐ ์๋ฒ์ ํด๋ผ์ด์ธํธ ๊ฐ์ ๋์ผํ ๊ฒ์ด๋ผ๊ณ ๊ฐ์ ํฉ๋๋ค. React๊ฐ ํ ์คํธ ์ปจํ ์ธ ์ ์ฐจ์ด๋ฅผ ๊ณ ์น ์๋ ์์ง๋ง ์ด๋ฌํ ๋ถ์ผ์น๋ฅผ ๋ฒ๊ทธ๋ก ์ทจ๊ธํ์ฌ ๊ณ ์ณ์ผ ํฉ๋๋ค. ๊ฐ๋ฐ ๋ชจ๋์์ React๋ hydration ์ค์ ๋ถ์ผ์น์ ๋ํด ๊ฒฝ๊ณ ํฉ๋๋ค. ๋ถ์ผ์น ์ํฉ์์๋ ์ดํธ๋ฆฌ๋ทฐํธ ์ฐจ์ด๊ฐ ๊ณ ์ณ์ง ์ ์๋ค๊ณ ๋ณด์ฅํ ์ ์์ต๋๋ค. ๋๋ค์์ ์ ํ๋ฆฌ์ผ์ด์ ์์ ๋ถ์ผ์น๊ฐ ๋ฐ์ํ๋ ๊ฒฝ์ฐ๋ ๋ง์ง ์์ผ๋ฉฐ, ๋ฐ์ํ ๊ฒฝ์ฐ ๋ชจ๋ ๋งํฌ์ ์ ๊ฒ์ฆํ๋ ๊ฒ์ด ๋งค์ฐ ํฐ ๋น์ฉ์ ์๋ฐํ๊ธฐ ๋๋ฌธ์ ์ฑ๋ฅ์์ ์ด์ ๋ก ์ค์ํ ๋ฌธ์ ์ ๋๋ค.