kohigowild
React JSX ๋ฌธ๋ฒ๊ณผ ์์ ์ ๋ฆฌ ๋ณธ๋ฌธ
๐ JSX๋?
- JSX๋ ์๋ฐ์คํฌ๋ฆฝํธ์ ํ์ฅ ๋ฌธ๋ฒ์ด๋ค. React์์ HTML์ ํํํ ๋ JSX๋ฅผ ์ฌ์ฉํ๋ค. ์ฆ, ์๋ฐ์คํฌ๋ฆฝํธ์ ๊ณต์์ ์ธ ๋ฌธ๋ฒ์ ์๋๋ค.
- ๋ธ๋ผ์ฐ์ ์์ ์คํํ๊ธฐ ์ ์ ์ฝ๋๊ฐ ๋ฒ๋ค๋ง๋๋ ๊ณผ์ ์์ ๋ฐ๋ฒจ์ ์ฌ์ฉํ์ฌ ์ผ๋ฐ ์๋ฐ์คํฌ๋ฆฝํธ ํํ์ ์ฝ๋๋ก ๋ณํ๋๋ค.
- ์๋ฐ์คํฌ๋ฆฝํธ์์ HTML์ ์์ฑํ๋ฏ์ด ๋น์ทํ๊ฒ ์์ฑํ ์ ์๋๋ก ํด ์ฃผ๋ ๊ฒ์ด JSX์ ๊ฐ์ฅ ํฐ ์ฅ์ ์ด๋ค.
- JSX๋ฅผ ์ฌ์ฉํ์ง ์์ React Element
const element = React.createElement(
"div", null, React.createElement(
"a", null, "Hello World", ""
)
);
- JSX ๋ฌธ๋ฒ ์ฌ์ฉ
const element = (
<div>
<a> {"Hello World"} </a>
</div>
);
๐ JSX ๋ฌธ๋ฒ
๐ก ๋ฐ๋์ ๋ถ๋ชจ ์์๋ ํ ๊ฐ์ ํ๊ทธ๋ก ๊ฐ์ธ์ ธ ์์ด์ผ ํ๋ค.
function App() {
return (
<div>
<div>์ด๊ฒ์ด๋ฐ๋ก</div>
<div>์ฌ๋ฐ๋ฅธ๋ฐฉ๋ฒ</div>
</div>
);
}
function App() {
return (
// div ์์๋ฅผ ์ฐ๊ณ ์ถ์ง ์์ ๊ฒฝ์ฐ 1๋ฒ
<Fragment>
<div>์ด๊ฒ์ด๋ฐ๋ก</div>
<div>์ฌ๋ฐ๋ฅธ๋ฐฉ๋ฒ</div>
</Fragment>
);
}
function App() {
return (
// div ์์๋ฅผ ์ฐ๊ณ ์ถ์ง ์์ ๊ฒฝ์ฐ 2๋ฒ
<>
<div>์ด๊ฒ์ด๋ฐ๋ก</div>
<div>์ฌ๋ฐ๋ฅธ๋ฐฉ๋ฒ</div>
</>
);
}
- div ์์๋ฅผ ์ฌ์ฉํ๊ณ ์ถ์ง ์์ ๋ Fragment๋ผ๋ ๊ธฐ๋ฅ์ ์ฌ์ฉํ๋ค. Fragment๋ <>๊ณผ ๊ฐ์ ํํ๋ก๋ ํํํ ์ ์๋ค.
- ํ๋์ ์์๋ก ๊ฐ์ธ์ผ ํ๋ ์ด์ ⇒ virtual DOM์์ ์ปดํฌ๋ํธ ํจ๊ณผ๋ฅผ ํจ์จ์ ์ผ๋ก ๊ฐ์งํ์ฌ ๋น๊ตํ ์ ์๋๋ก ์ปดํฌ๋ํธ ๋ด๋ถ๋ ํ๋์ DOM ํธ๋ฆฌ๋ก ๊ตฌ์ฑ๋์ด ์์ด์ผ ํ๋ค.
๐ก JSX ์์์๋ ์๋ฐ์คํฌ๋ฆฝํธ ํํ์์ ์ฌ์ฉํ ์ ์๋ค. ์ฝ๋๋ฅผ {}๋ก ๊ฐ์ธ์ฃผ๋ฉด ๋๋ค.
function App() {
const id = "trustmitt";
return (
<div>
<div>Hello</div>
<div>{id}!</div>
</div>
);
}
๐ก if๋ฌธ, for๋ฌธ ๋์ ์ผํญ ์ฐ์ฐ์๋ฅผ ์ฌ์ฉํ๋ค. if๋ฌธ์ด๋ for๋ฌธ์ ์ฌ์ฉํด์ผ ํ๋ ๊ฒฝ์ฐ์๋ JSX ๋ฐ์์ ์ฌ์ฉํ๋ค.
function App() {
const id = "trustmitt";
return <div>{id == "trustmitt" ? <div>๋ฐ์
๋๋ค</div> : <div>์๋๋๋ค</div>}</div>;
}
// if๋ฌธ ์ฌ์ฉ ์์
function App() {
const id = "trustmitt";
if (id == "trustmitt") {
item = <div>๋ฐ์
๋๋ค</div>;
} else {
item = <div>์๋๋๋ค</div>;
}
return <div>{item}</div>;
}
๐ก ํน์ ์กฐ๊ฑด์ ๋ง์กฑํ ๋ ๋ด์ฉ์ ๋ณด์ฌ์ฃผ๊ณ , ๋ง์กฑํ์ง ์์ ๋ ์์ ์๋ฌด๊ฒ๋ ๋ ๋๋ง ํ์ง ์์์ผ ํ๋ ์ํฉ์ && ์ฐ์ฐ์๋ฅผ ์ฌ์ฉํ๋ค.
function App() {
const id = "trustmitt";
return (
<div>
{/* "๋ฐ์
๋๋ค" ๋ง ๋ ๋๋ง */}
{id === "trustmitt" && <div>๋ฐ์
๋๋ค</div>}
{id === "nottrustmitt" && <div>์๋๋๋ค</div>}
</div>
);
}
๐ก ๋ฆฌ์กํธ ์ปดํฌ๋ํธ์์๋ ํจ์์์ undefined๋ง ๋ฐํํ์ฌ ๋ ๋๋ง ํ๋ ์ํฉ์ ๋ง๋ค๋ฉด ์ ๋๋ค.
function App() {
// ์ค๋ฅ ๋ฐ์ ์ฝ๋
const item = undefined;
return item;
}
function App() {
// JSX ๋ด๋ถ์์ undefined๋ฅผ ๋ ๋๋ง ํ๋ ๊ฒฝ์ฐ ์ค๋ฅ๊ฐ ์๊ธฐ์ง ์๋๋ค
const item = undefined;
return <div>{item}</div>;
}
function App() {
// OR ์ฐ์ฐ์๋ฅผ ํตํด ์ค๋ฅ ๋ฐฉ์ง
const item = undefined;
return item || "undefined ์
๋๋ค";
}
๐ก ํด๋์ค ์ ์ ์ class๊ฐ ์๋ className์ ์ฌ์ฉํ๋ค.
function App() {
return (
<div>
<div className="container"></div>
</div>
);
}
๐ Reference
https://im-designloper.tistory.com/79
https://www.nextree.io/jsxmunbeobgwa-seontaegjeog-rendeoring/
https://goddaehee.tistory.com/296
'React' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[React] props์ state (0) | 2022.12.15 |
---|---|
REACT ์ปดํฌ๋ํธ ์๋ช ์ฃผ๊ธฐ (Life Cycle) (0) | 2022.12.10 |
React :: COIN TRACKER (0) | 2022.11.29 |
React๋ก ๊ฐ๋จํ To-Do-List ๊ตฌํ (0) | 2022.11.24 |
React useState(), useEffect() (0) | 2022.11.15 |