๐ JSX
JSX๋ ์๋ฐ์คํฌ๋ฆฝํธ XML์ ์ฝ์.
์ฆ, JSX๋ ์๋ฐ์คํฌ๋ฆฝํธ๋ฅผ ํ์ฅํ ๋ฌธ๋ฒ์ด๋ฉฐ, ๊ทธ๋ฐ ๋งํผ, ์๋ฐ์คํฌ๋ฆฝํธ์ ์ฌ์ฉ๋ฒ์ด ๋ง์ด ๋น์ทํ๋ค.
HTML์ React์์ ์ฝ๊ฒ ์ฐ๊ธฐ ์ํด ์ฌ์ฉํ๋ค.
React๋ JSX ๋ฌธ๋ฒ์ ์ด์ฉํด ๋งํฌ์ ์ธ์ด์ ์ฝ๋์ ๋ก์ง์ ๋ฐ๋ก ๋ถ๋ฆฌํ์ง ์๊ณ , ๋ ๊ฐ์ง๋ฅผ ํฌํจํ "์ปดํฌ๋ํธ"๋ฅผ ์ฌ์ฉ
๐ก ํํ์
JSX์์๋ "์ค๊ดํธ( { } )"๋ฅผ ์ด์ฉํด, ์ฌ์ฉ ๊ฐ๋ฅํ ํํ์๋ค์ด ์๋ค.
- ๋จผ์ , ์ค๊ดํธ๋ฅผ ์ด์ฉํด, HTML ๋ด์ ๋ณ์๋ฅผ ํํํ ์ ์๋ค.
const name = 'elice';
const element = <h1> Hello, {name}! </h1>;
- ์ค๊ดํธ๋ฅผ ์ด์ฉํด, ํจ์ ํํ์์ ๋ฃ๋ ๊ฒ๋ ๊ฐ๋ฅํ๋ค.
function greeting(){
return "Hello, elice!";
}
const element = <h1>{greeting()}</h1>;
- ํจ์ ๋ด์์ ํํ์์ ์ ์ฉํ ์๋ ์๋ค.
function formatGreeting(name){
return "Hello" + ' ' + name;
}
function getGreeting(user) {
return <h1>Hello, {formatGreeting("elice!")}!</h1>;
}
๐ก ์์ฑ
- ํฐ ๋ฐ์ดํ๋ฅผ ์ด์ฉํด JSX์ ์์ฑ์ ์ง์ ํ ์ ์๋ค.
const element = <a href = "https://kdt.elice.io/explore">์๋ฆฌ์ค๋ก ์ด๋</a>;
๐ก ์์ ์ ์
- ์์ ํ๊ทธ๊ฐ ์ฌ๋ฌ๊ฐ ํฌํจ๋ ์ฝ๋๋ฅผ ์ ์ฅํ๊ธฐ ์ํด์๋, ์์ ํ๊ทธ๋ฅผ ๋ถ๋ชจ ํ๊ทธ๋ก ๊ฐ์ธ์ผ ํ๋ค.
const element = (
<div>
<h1>Hello,</h1>
<h2>elice!</h2>
</div>
);
// <div> = ๋ถ๋ชจ ํ๊ทธ
// <h1>,<h2> = ์์ ํ๊ทธ
- ๋ชจ๋ ํ๊ทธ๋ ๋ฐ๋์ ๋ซํ์ผ ํ๋ค. ๋ค๋ง, ์๋ ํ๊ทธ ์ด๋ฆ์ ๋ง์ถฐ์ </input> ์ฒ๋ผ ๋ซ์์ผ ํ์ง๋ง
์ด๋ฆ์ ์๋ตํ๊ณ />๋ง ์ด์ฉํด์ ๋ซ์๋ ๊ด์ฐฎ๋ค.
const element = <input type="text" />;
๐ก ๊ฐ์ฒด ํํ
React.createElement( ) ๋ฉ์๋๋ฅผ ์ด์ฉํ๋ฉด, JSX ๋ฌธ๋ฒ์ ์ด์ฉํ์ง ์๊ณ , ๊ฐ์ฒด๋ก ํํํ ์ ์๋ค.
๋ ์ฝ๋๋ ๋ฌธ๋ฒ์ด ๋ค๋ฅด์ง๋ง, ๊ฐ์ ๋ด์ฉ์ ๋ด๊ณ ์๋ค.
- HTML ์ง์ ์์ฑ
const element = (
<h1 className="greeting">
Hello, world!
</h1>
);
- React.createElement( ) ๋ก ์์ฑ
const element = React.createElement(
'h1',
{className: 'greeting'},
'Hello, world!'
);
๐ ์๋ฆฌ๋จผํธ ๋ ๋๋ง
Element ( ์๋ฆฌ๋จผํธ ) : React ์ฑ์ ๊ฐ์ฅ ์์ ๋จ์, ์ปดํฌ๋ํธ(Component์ ๊ตฌ์ฑ์์)
์ฝ๊ฒ ๋งํ๋ฉด, HTML ์์๋ผ๊ณ ํ ์ ์๋ค.
Rendering( ๋ ๋๋ง ) : ์ด๋ฌํ element๋ฅผ ํ๋ฉด์ ๊ทธ๋ฆฌ๋ ๊ฒ
๐ก ReactDOM๊ณผ ๋ ๋๋ง
- React๋ ๊ฐ์(Virutal) DOM๊ณผ ์ค์ ๋ก, ํ์๋๋ DOM์ ์ ์งํ๋ค.
- React๋ ์ค์ DOM์ ์ถ์ํํ์ฌ, ๊ฐ์ DOM์ ๋ง๋ค์ด๋๊ณ , ๋ฐ์ดํฐ๊ฐ ์ ๋ฐ์ดํธ๋๋ฉด ํ ๋ฒ์ ๋ ๋๋งํ๋ค.
- ๊ฒฐ๊ณผ์ ์ผ๋ก, ๊ณ์ํด์ DOM์ ๋ ๋๋งํ๋ ๊ฒ๋ณด๋ค ์๋๊ฐ ๋น ๋ฅด๋ค.
ReactDOM.render( ) : ๋ ๋๋ง ํจ์
- HTML ํ์ผ ์์ Id๊ฐ root์ธ ์์๊ฐ ์๋ค๊ณ ํด๋ณด์.
<div id="root"></div>
- ํด๋น HTML์ ํ ์คํธ๋ฅผ ๋ฃ๊ธฐ ์ํด, ReactDOM.render( )์ ์ด์ฉํด, ๋ค์๊ณผ ๊ฐ์ด ๋ ๋๋ง ํ๋ค.
const element = <h1>Hello, elice</h1>;
ReactDOM.render(element, document.getElementById('root'));
// ReactDOM์ ๋ ๋๋ง ํ ๊บผ๋ค. element๋ฅผ, id = root ์ธ ์์์๋ค๊ฐ ~
๐ก ์๋ฆฌ๋จผํธ ์ ๋ฐ์ดํธ
- ์๋ฆฌ๋จผํธ๋ ํ ๋ฒ ์์ฑ๋๋ฉด, ์์ ์ด ๋ถ๊ฐ๋ฅํ ๋ถ๋ณ ๊ฐ์ฒด์ด๋ค.
- ๊ฐ์ ๋ณ๊ฒฝํ๊ณ ์ถ์ผ๋ฉด, ์๋ก์ด ์๋ฆฌ๋จผํธ๋ฅผ ๋ง๋ค์ด ์ ๋ฐ์ดํธ ํด์ผ ํ๋ค.
๋ง์ฝ, ์๊ฐ์ ์ถ๋ ฅํ๋ ๊ธฐ๋ฅ์ ๊ตฌํํ๊ณ ์ถ๋ค๋ฉด, ๋งค ์ด๋ง๋ค ๋ ๋๋ง์ ํด์ค์ผ ํ ๊ฒ์ด๋ค.
function tick() {
const element = (
<div>
<h1>{new Date().toLocaleTimeString()}</h1>
</div>
);
ReactDOM.render(element, document.getElementById('root'));
}
setInterval(tick, 1000);
Date ๊ฐ์ฒด์ toLocaleTimeString( ) ๋ฉ์๋๋ฅผ ์ด์ฉํ๋ฉด, ์๊ฐ์ ๋ฐํํด์ฃผ๋๋ฐ, ์ค์ ๋ก ์๊ฐ์ด ๋ณํ๋ ๊ฒ์ ํ์ธํ๊ธฐ ์ํด์๋ setInterval( ) ์ฝ๋ฐฑ์ ์ด์ฉํด tick์ ๊ณ์ ํธ์ถํด์ผํ๋ค.
setInterval( )์ ๋งค๊ฐ๋ณ์์ธ 1000์ 1์ด๋ฅผ ์๋ฏธํ๋ค.
'WEB' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[JS] ๋ฐฐ์ด ๋ด์ฅํจ์ (0) | 2021.03.22 |
---|---|
[React] ์ปดํฌ๋ํธ(Component) (0) | 2021.02.06 |
[React] ๊ฐ์ & JS์ ์ฐจ์ด์ (0) | 2021.02.03 |
[JS] DOM,Event,Node๊ฐ์ฒด (0) | 2021.02.03 |
[HTML] HTML ์์ ํ๊ทธ ์ ๋ฆฌ (0) | 2021.02.02 |