JSX
2์ฃผ์ฐจ ํค์๋
React์์ JSX๋ฅผ ์ฌ์ฉํ๋ ๋ชฉ์
Syntactic sugar
React.createElement
React Element
React StrictMode
JSX๋ฅผ ์์๋ณด๊ธฐ ์ ์...
React Element
React Element๋ React๋ฅผ ๊ตฌ์ฑํ๋ ๊ฐ์ฅ ์์ ๋จ์์ด๋ค. React DOM์ ์๋ฆฌ๋จผํธ๊ฐ ๋ชจ์ฌ์ ๋ง๋ค์ด์ง ์๋ฆฌ๋จผํธ ํธ๋ฆฌ๋ฅผ ๊ฐ์งํด์ DOM์ ์ ๋ฐ์ดํธํ๋ค. React DOM์ด ์ ๋ฐ์ดํธ ๋๋ ๋ถ๋ถ์ Virtual DOM์ ์ ๋ฆฌํ๋ฉด์ ์์ธํ ํด์ผ๊ฒ ๋ค. JSX๋ฅผ ์์๋ณด๊ธฐ ์ํด ์ฌ๊ธฐ์๋ React Element๊ฐ ๋ฆฌ์กํธ๋ฅผ ๊ตฌ์ฑํ๋ ์์๋ผ๋ ๊ฒ๋ง ์์๋์.
const element = <h1>Hello, world!</h1>;
React.createElement
React.createElement๋ React Element๋ฅผ ๋ง๋๋ ๋ฉ์๋์ด๋ค. ์ด ๋ฉ์๋๋ก react๋ฅผ ๊ตฌ์ฑํ๋ ์์๋ค์ ๋ง๋ค ์ ์๋ค.
React.createElement(component, props, ...children)
function User({name}) {
return <div>user name is {name}</div>
}
const root = ReactDOM.createRoot(document.getElementById('root'));
root.render(React.createElement(User, {name: 'Jiwon'}, null));
React.createElement ๋ฉ์๋๋ก User๋ผ๋ Component๋ฅผ ํ๋ฉด์ ๋๋๋ง ํ๋ ๊ณผ์ ์ด๋ค. ํ๋ฉด์๋ user name is Jiwon
์ด ์ถ๋ ฅ๋๋ค.
JSX
JSX๋ React.createElement๋ฅผ ์ฌ์ฉํ์ง ์๊ณ ๋ React Element๋ฅผ ๋ง๋ค ์ ์๊ฒ ํด์ฃผ๋ Javascript์ ํ์ฅ ๋ฌธ๋ฒ์ด๋ค. JSX๋ฅผ ์ฌ์ฉํ๋ฉด React Element๋ฅผ ๋ ์ง๊ด์ ์ผ๋ก ์์ฑํ ์ ์๋ค. ํ๋ง๋๋ก ๊ฐ๋ฐ์ ๋ ํธํ๊ฒ ํด์ฃผ๋ Syntactic sugar
์ด๋ค.
Syntactic sugar๋ ์ฌ๋์ด ์ฝ๊ฒ ์ดํดํ ์ ์๋ ๋ฌธ๋ฒ์ผ๋ก ๋ณํํด์ฃผ๋ ๋ฌธ๋ฒ์ด๋ค.
// JSX
<p>Hello, world!</p>
// Javascript
React.createElement("p", null, "Hello, world!");
// JSX
<p className="text">Hello, world!</p>
// Javascript
React.createElement("p", { className: "text" }, "Hello, world!");
JSX๋ ์๋ฐ์คํฌ๋ฆฝํธ ๋ฌธ๋ฒ์ด ์๋๊ธฐ ๋๋ฌธ์ ๋ธ๋ผ์ฐ์ ๊ฐ ์ดํดํ ์ ์๋ค. ๋ฐ๋ผ์ JSX๋ฅผ ์ฌ์ฉํ๋ ค๋ฉด JSX๋ฅผ ์๋ฐ์คํฌ๋ฆฝํธ๋ก ๋ณํํด์ฃผ๋ Babel
์ด๋ผ๋ ๋๊ตฌ๊ฐ ํ์ํ๋ค. Babel์ JSX๋ฅผ React.createElement๋ก ๋ณํํด์ค๋ค. typescript๋ฅผ ์ฌ์ฉํ๋ฉด Babel์ ์ฌ์ฉํ์ง ์์๋ ๋๋ค.
JSX ๋ฌธ๋ฒ
ํ๊ทธ๋ ๊ผญ ๋ซํ์ผ ํ๋ค. Why? JSX๊ฐ Javascript ๊ฐ์ฒด๋ก ๋ณํ๋ ๋ ์ ํํ ์์๊ณผ ๋์ ์ ์ ์๋๋ก ํด์ค์ผ ํ๊ธฐ ๋๋ฌธ์ด๋ค.
๋ ๊ฐ ์ด์์ ํ๊ทธ๋ ํ๋์ ํ๊ทธ๋ก ๊ฐ์ธ์ ธ ์์ด์ผ ํ๋ค. why? ์ปดํฌ๋ํธ๋ ํ๋์ DOM ํธ๋ฆฌ๋ก ์ด๋ฃจ์ด์ ธ์ผ ํ๋ค.
JSX ์์์ ์๋ฐ์คํฌ๋ฆฝํธ ํํ์์ ์ฌ์ฉํ ์ ์๋ค. JSX์์์ {}๋ฅผ ์ฌ์ฉํ๋ฉด ์๋ฐ์คํฌ๋ฆฝํธ ํํ์์ ์ฌ์ฉํ ์ ์๋ค.
JSX ์์์ if๋ฌธ, for๋ฌธ์ ์ฌ์ฉํ ์ ์๋ค. JSX๋ ์๋ฐ์คํฌ๋ฆฝํธ ํํ์์ด๊ธฐ ๋๋ฌธ์ if๋ฌธ, for๋ฌธ์ ์ฌ์ฉํ ์ ์๋ค. ํ์ง๋ง ์ผํญ์ฐ์ฐ์๋ ์ฌ์ฉํ ์ ์๋ค.
JSX ์์์ ์ฃผ์์ ์ฌ์ฉํ ์ ์๋ค.
{/* ์ฃผ์ ๋ด์ฉ */}
JSX ์์์ class ๋์ className์ ์ฌ์ฉํด์ผ ํ๋ค.
JSX ์์์ style์ ์ฌ์ฉํ ๋๋ ๊ฐ์ฒด ํํ๋ก ์์ฑํด์ผ ํ๋ค.
<div style={{color: 'red'}}></div>
JSX ์์์๋ camelCase๋ฅผ ์ฌ์ฉํด์ผ ํ๋ค.
<div tabIndex="0"></div>
์๋กญ๊ฒ ์๊ฒ๋ ์
๊ทธ๋์ React์์ JSX๋ฅผ ๋น์ฐํ๊ฒ ์จ์๋ค. ๋จ์ํ React์์ ์ฌ์ฉํ๋ ๋ฌธ๋ฒ์ผ๋ก ์๊ฐํ๋๋ฐ React๊ฐ ์๋์ฌ๋ ์ฌ์ฉํ ์ ์๊ณ , ๊ผญ React์์ JSX๋ฅผ ์ฌ์ฉํ์ง ์์๋ ๋๋ค๋ ์ ์ ์๊ฒ ๋๋ค. JSX๋ก ๋ง๋ ์ฝ๋๊ฐ ์ด๋ป๊ฒ Javascript๋ก ๋ณํ๋๋์ง ์๊ฒ๋๊ณ ๋๋๋ง๊ณผ ์ด๋ป๊ฒ ๊ด๊ณ๊ฐ ์๋์ง ์กฐ๊ธ ์ดํด๊ฐ ๋ ๊ฒ ๊ฐ๋ค. ๋๋๋ง์ด ๋ด ์๋์ ๋ค๋ฅด๊ฒ ๋์ํ ๋๊ฐ ๋ง์๋๋ฐ Virtual DOM์ ๊ณต๋ถํ๋ฉด์ React๊ฐ ์ด๋ป๊ฒ ํ๋ฉด์ ๊ทธ๋ ค์ง๊ณ ๋๋๋ง ๋๋์ง ์กฐ๊ธ ๋ ์ดํดํ ์ ์์ ๊ฒ ๊ฐ๋ค.
๋ ๊ณต๋ถํ ๊ฒ
Last updated