preinit
preinit์ ์คํ์ผ์ํธ๋ ์ธ๋ถ ์คํฌ๋ฆฝํธ๋ฅผ ๋ฏธ๋ฆฌ ๊ฐ์ ธ์ค๊ณ ์คํํ ์ ์๊ฒ ํฉ๋๋ค.
preinit("https://example.com/script.js", {as: "script"});๋ ํผ๋ฐ์ค
preinit(href, options)
์คํฌ๋ฆฝํธ๋ ์คํ์ผ์ํธ๋ฅผ preinit ํ๋ ค๋ฉด react-dom์์ preinitํจ์๋ฅผ ํธ์ถํ์ธ์.
import { preinit } from 'react-dom';
function AppRoot() {
preinit("https://example.com/script.js", {as: "script"});
// ...
}์๋ ์์์์ ๋ ๋ณด๊ธฐ.
preinit ํจ์๋ ๋ธ๋ผ์ฐ์ ์๊ฒ ์ฃผ์ด์ง ๋ฆฌ์์ค๋ฅผ ๋ค์ด๋ก๋ํ๊ณ ์คํํ๋ผ๋ ํํธ๋ฅผ ์ ๊ณตํ์ฌ ์๊ฐ ์ ์ฝ์ ๋์์ ์ค๋๋ค. preinitํ ์คํฌ๋ฆฝํธ๋ ๋ค์ด๋ก๋๊ฐ ์๋ฃ๋๋ฉด ์ฆ์ ์คํ๋ฉ๋๋ค. ์คํ์ผ์ํธ๋ ๋ฌธ์์ ์ฝ์
๋์ด ๊ณง๋ฐ๋ก ์ ์ฉ๋ฉ๋๋ค.
๋งค๊ฐ๋ณ์
href: ๋ฌธ์์ด. ๋ค์ด๋ก๋ํ๊ณ ์คํํ ๋ฆฌ์์ค์ URL์ ๋๋ค.options: ๊ฐ์ฒด. ๋ค์ ์์ฑ๋ค์ ํฌํจํ ์ ์์ต๋๋ค.as: ํ์ ๋ฌธ์์ด. ๋ฆฌ์์ค์ ์ ํ์ ๋๋ค. ๊ฐ๋ฅํ ๊ฐ์script์style์ ๋๋ค.precedence: ๋ฌธ์์ด. ์คํ์ผ์ํธ์ ํ์์ ๋๋ค. ๋ค๋ฅธ ์คํ์ผ์ํธ์์ ์ฝ์ ์์๋ฅผ ๊ฒฐ์ ํฉ๋๋ค. ์ฐ์ ์์๊ฐ ๋์ ์คํ์ผ์ํธ๊ฐ ๋ฎ์ ๊ฒ์ ๋ฎ์ด์ธ ์ ์์ต๋๋ค. ๊ฐ๋ฅํ ๊ฐ์reset,low,medium,high์ ๋๋ค.crossOrigin: ๋ฌธ์์ด. ์ฌ์ฉํ CORS ์ ์ฑ ์ ๋๋ค. ๊ฐ๋ฅํ ๊ฐ์anonymous์use-credentials์ ๋๋ค.integrity: ๋ฌธ์์ด. ๋ฆฌ์์ค์ ๋ฌด๊ฒฐ์ฑ์ ๊ฒ์ฆํ๊ธฐ ์ํ ์ํธํ ํด์์ ๋๋ค.nonce: ๋ฌธ์์ด. ์๊ฒฉํ ์ฝํ ์ธ ๋ณด์ ์ ์ฑ ์ ์ฌ์ฉํ ๋, ๋ฆฌ์์ค๋ฅผ ํ์ฉํ๊ธฐ ์ํ ์ํธํ๋ nonce to allow the resource์ ๋๋ค.fetchPriority: ๋ฌธ์์ด. ๋ฆฌ์์ค๋ฅผ ๊ฐ์ ธ์ค๋ ๋ฐ ์ฌ์ฉํ ์๋์ ์ธ ์ฐ์ ์์๋ฅผ ์ ์ํฉ๋๋ค. ๊ฐ๋ฅํ ๊ฐ์auto(๊ธฐ๋ณธ๊ฐ),high,low์ ๋๋ค.
๋ฐํ๊ฐ
preinit์ ์๋ฌด๊ฒ๋ ๋ฐํํ์ง ์์ต๋๋ค.
์ฃผ์ ์ฌํญ
- ๋์ผํ
href๋กpreinit์ ์ฌ๋ฌ ๋ฒ ํธ์ถํด๋, ํ ๋ฒ ํธ์ถํ ๊ฒ๊ณผ ๋์ผํ ํจ๊ณผ๋ง ๋ฐ์ํฉ๋๋ค. - ๋ธ๋ผ์ฐ์ ์์๋ ์ปดํฌ๋ํธ๋ฅผ ๋ ๋๋งํ ๋, Effect ๋ด๋ถ์์, ์ด๋ฒคํธ ํธ๋ค๋ฌ ์์์ ๋ฑ ์ด๋ค ์ํฉ์์๋
preinit์ ํธ์ถํ ์ ์์ต๋๋ค. - ์๋ฒ ์ฌ์ด๋ ๋ ๋๋ง ๋๋ ์๋ฒ ์ปดํฌ๋ํธ๋ฅผ ๋ ๋๋งํ ๋๋, ์ปดํฌ๋ํธ๋ฅผ ๋ ๋๋งํ๋ฉด์ ๋๋ ์ปดํฌ๋ํธ ๋ ๋๋ง์์ ์์๋ ๋น๋๊ธฐ ์ปจํ
์คํธ ๋ด์์๋ง
preinitํธ์ถ์ด ํจ๊ณผ๋ฅผ ๊ฐ์ง๋๋ค. ๊ทธ ์ธ์ ํธ์ถ์ ๋ฌด์๋ฉ๋๋ค.
์ฌ์ฉ๋ฒ
๋ ๋๋ง ์ preinit ํ๊ธฐ
ํน์ ์ปดํฌ๋ํธ๋ ๊ทธ ์์ ์ปดํฌ๋ํธ๊ฐ ํน์ ๋ฆฌ์์ค๋ฅผ ์ฌ์ฉํ ๊ฒ์ ์๊ณ ์๊ณ , ํด๋น ๋ฆฌ์์ค๊ฐ ๋ค์ด๋ก๋๋์๋ง์ ๋ฐ๋ก ์คํ๋๊ฑฐ๋ ์ ์ฉ๋๋ ๊ฒ์ด ๊ด์ฐฎ๋ค๋ฉด, ์ปดํฌ๋ํธ๋ฅผ ๋ ๋๋งํ ๋ preinit์ ํธ์ถํ์ธ์.
์์ 1 of 2: ์ธ๋ถ ์คํฌ๋ฆฝํธ preinit ํ๊ธฐ
import { preinit } from 'react-dom';
function AppRoot() {
preinit("https://example.com/script.js", {as: "script"});
return ...;
}์คํฌ๋ฆฝํธ๋ฅผ ๋ค์ด๋ก๋ํ๋ ์ฆ์ ์คํํ์ง ์์ผ๋ ค๋ฉด preload๋ฅผ ์ฌ์ฉํ์ธ์. ESM ๋ชจ๋์ ๋ก๋ํ๋ ค๋ฉด preinitModule์ ์ฌ์ฉํ์ธ์.
์ด๋ฒคํธ ํธ๋ค๋ฌ ๋ด์์ preinit ํ๊ธฐ
์ธ๋ถ ๋ฆฌ์์ค๊ฐ ํ์ํ ํ์ด์ง๋ ์ํ๋ก ์ ํํ๊ธฐ ์ ์ ์ด๋ฒคํธ ํธ๋ค๋ฌ์์ preinit์ ํธ์ถํ์ธ์. ์ด๋ ๊ฒ ํ๋ฉด ์ ํ์ด์ง๋ ์ํ ๋ ๋๋ง ์์ ๋ณด๋ค ๋ ์ผ์ฐ ๋ฆฌ์์ค ๋ค์ด๋ก๋๊ฐ ์์๋ฉ๋๋ค.
import { preinit } from 'react-dom';
function CallToAction() {
const onClick = () => {
preinit("https://example.com/wizardStyles.css", {as: "style"});
startWizard();
}
return (
<button onClick={onClick}>Start Wizard</button>
);
}