preinitModule
preinitModule
์ ESM ๋ชจ๋์ ๋ฏธ๋ฆฌ ๊ฐ์ ธ์ค๊ณ ํ๊ฐ(evaluate)ํ ์ ์๊ฒ ํด์ค๋๋ค.
preinitModule("https://example.com/module.js", {as: "script"});
๋ ํผ๋ฐ์ค
preinitModule(href, options)
ESM ๋ชจ๋์ ์ฌ์ ์ preinitํ๋ ค๋ฉด, react-dom
ํจํค์ง์์ preinitModule
ํจ์๋ฅผ ํธ์ถํ์ธ์.
import { preinitModule } from 'react-dom';
function AppRoot() {
preinitModule("https://example.com/module.js", {as: "script"});
// ...
}
์๋ ์์๋ฅผ ๋ ์ฐธ๊ณ ํ์ธ์.
preinitModule
ํจ์๋ ๋ธ๋ผ์ฐ์ ์ ํด๋น ๋ชจ๋์ ๋ค์ด๋ก๋ํ๊ณ ์คํํ ์ ์๋ค๋ ํํธ๋ฅผ ์ ๊ณตํ๋ฏ๋ก, ๋ก๋ฉ ์๊ฐ์ ๋จ์ถํ๋ ๋ฐ ๋์์ด ๋ฉ๋๋ค. preinit
๋ ๋ชจ๋์ ๋ค์ด๋ก๋๊ฐ ์๋ฃ๋๋ ์ฆ์ ์คํ๋ฉ๋๋ค.
๋งค๊ฐ๋ณ์
href
: ๋ฌธ์์ด์ ๋๋ค. ๋ค์ด๋ก๋ํ๊ณ ์คํํ ๋ชจ๋์ URL์ ๋๋ค.options
: ๊ฐ์ฒด์ ๋๋ค. ๋ค์ ์์ฑ์ ํฌํจํฉ๋๋ค:as
: ํ์ ๋ฌธ์์ด์ ๋๋ค. ๋ฐ๋์'script'
์ฌ์ผ ํฉ๋๋ค.crossOrigin
: ๋ฌธ์์ด์ ๋๋ค. ์ฌ์ฉํ CORS policy์ ์ง์ ํฉ๋๋ค. ๊ฐ๋ฅํ ๊ฐ์anonymous
๋๋use-credentials
์ ๋๋ค.integrity
: ๋ฌธ์์ด์ ๋๋ค. ๋ชจ๋์ ์ํธํ์ ํด์๋ก, ๋ฌด๊ฒฐ์ฑ์ ๊ฒ์ฆํ๋ ๋ฐ ์ฌ์ฉ๋ฉ๋๋ค.nonce
: ๋ฌธ์์ด์ ๋๋ค. ์๊ฒฉํ Content Security Policy๋ฅผ ์ฌ์ฉํ ๋ ๋ชจ๋์ ํ์ฉํ๊ธฐ ์ํ ์ํธํ์ nonce์ ๋๋ค.
๋ฐํ๊ฐ
preinitModule
์ ๊ฐ์ ๋ฐํํ์ง ์์ต๋๋ค.
์ฃผ์ ์ฌํญ
- ๋์ผํ
href
๋กpreinitModule
์ ์ฌ๋ฌ ๋ฒ ํธ์ถํด๋, ํ ๋ฒ ํธ์ถํ ๊ฒ๊ณผ ๋์ผํ ํจ๊ณผ๋ง ๋ฐ์ํฉ๋๋ค. - ๋ธ๋ผ์ฐ์ ์์๋ ์ปดํฌ๋ํธ๋ฅผ ๋ ๋๋งํ ๋, ์ดํํธ ์์์, ์ด๋ฒคํธ ํธ๋ค๋ฌ ๋ฑ ์ด๋ค ์ํฉ์์๋
preinitModule
์ ํธ์ถํ ์ ์์ต๋๋ค. - ์๋ฒ ์ธก ๋ ๋๋ง์ด๋ Server Components๋ฅผ ๋ ๋๋งํ ๋๋,
preinitModule
๋ ์ปดํฌ๋ํธ๋ฅผ ๋ ๋๋งํ๋ ์ค์ด๊ฑฐ๋ ๋ ๋๋ง์์ ํ์๋ ๋น๋๊ธฐ ์ปจํ ์คํธ ๋ด์์ ํธ์ถํ ๊ฒฝ์ฐ์๋ง ํจ๊ณผ๊ฐ ์์ต๋๋ค. ๊ทธ ์ธ์ ํธ์ถ์ ๋ฌด์๋ฉ๋๋ค.
์ฌ์ฉ๋ฒ
๋ ๋๋ง ์ค ์ฌ์ ๋ก๋ฉํ๊ธฐ
ํน์ ๋ชจ๋์ด ํ์ฌ ์ปดํฌ๋ํธ๋ ์์ ์ปดํฌ๋ํธ์์ ์ฌ์ฉ๋ ๊ฒ์์ ์๊ณ ์๊ณ , ํด๋น ๋ชจ๋์ด ๋ค์ด๋ก๋ ์ฆ์ ํ๊ฐ๋์ด ํจ๊ณผ๋ฅผ ๋ฐํํด๋ ๊ด์ฐฎ๋ค๋ฉด, ์ปดํฌ๋ํธ๋ฅผ ๋ ๋๋งํ ๋ preinitModule
์ ํธ์ถํ์ธ์.
import { preinitModule } from 'react-dom';
function AppRoot() {
preinitModule("https://example.com/module.js", {as: "script"});
return ...;
}
๋ชจ๋์ ๋ค์ด๋ก๋ํ๋ ์ฆ์ ์คํํ์ง ์์ผ๋ ค๋ฉด preloadModule
์ ์ฌ์ฉํ์ธ์. ESM ๋ชจ๋์ด ์๋ ์คํฌ๋ฆฝํธ๋ฅผ ์ฌ์ ์ด๊ธฐํํ๋ ค๋ฉด preinit
์ ์ฌ์ฉํ์ธ์.
์ด๋ฒคํธ ํธ๋ค๋ฌ์์ ์ฌ์ ๋ก๋ฉํ๊ธฐ
์ด๋ฒคํธ ํธ๋ค๋ฌ์์ ๋ชจ๋์ด ํ์ํด์ง ํ์ด์ง๋ ์ํ๋ก ์ ํํ๊ธฐ ์ ์ preinitModule
์ ํธ์ถํ์ธ์. ์ด๋ ๊ฒ ํ๋ฉด ์๋ก์ด ํ์ด์ง๋ ์ํ๋ฅผ ๋ ๋๋งํ ๋๋ณด๋ค ๋ ์ผ์ฐ ๋ก๋ฉ์ ์์ํ ์ ์์ต๋๋ค.
import { preinitModule } from 'react-dom';
function CallToAction() {
const onClick = () => {
preinitModule("https://example.com/module.js", {as: "script"});
startWizard();
}
return (
<button onClick={onClick}>Start Wizard</button>
);
}