const element = <h1>Hello, world!</h1>;
์ด๊ฒ ๋ฐ๋ก JSX ์ด๋ค !
JSX
: Javascript XML(syntax extension for JavaScript / extensive markup language)
๊ทธ๋ผ XML์?
: HTML์ ํ๊ณ๋ฅผ ๊ทน๋ณตํ ๋งํฌ์ ์ธ์ด
ํน์ง : ํธํ์ฑ / ํ์ฅ์ฑ์ด ๋ฐ์ด๋จ, tag๋ก ์ ์ํ๋ฉฐ ๋ฐ์ดํฐ๋ฅผ ๊ธฐ์ ํ ์ ์๋ค.
ํํ์ด์ง ๊ตฌ์ถ, ๊ฒ์ ๊ธฐ๋ฅ ํฅ์, ๋ณต์กํ ๋ฐ์ดํฐ ์ฒ๋ฆฌ ์ฉ์ดHTML์ ํ๋ฉด์ ๋ํ๋ด๋ ๋ฌธ์๊ฐ ํ๋์ ํ์ผ๋ก ์ ์ฅ But, XML์ ์์๋ณ ๊ฐ๋ณํ์ผ๋ก ๊ตฌ์ฑํ๊ณ
์์๋ณ๋ก ์ ์ฅ/๊ฒ์/์ฌ์ฌ์ฉ ๊ฐ๋ฅํ์ฌ XML๋จ๋ ์ผ๋ก๋ ์ ์ฌ์ฉํ์ง ์๋๋ค.
๊ทธ๋ ๋ค !
์๋ฐ์คํฌ๋ฆฝํธ ๋ฌธ๋ฒ์ ํ์ฅํ !
๋งํฌ์
๊ณผ ๋ก์ง์ ํฌํจํ๋ '์ปดํฌ๋ํธ'๋ก ์ฌ์ฉ๋ ๋ฆฌ์กํธ์ ๊ฐ์ฅ ๊ธฐ๋ณธ์ ์ธ ๊ฐ๋
์ด๋ค.
JSX์ ํน์ฑ์ ๋ํด ์์๋ณด์.
JSX element
HTML๋ฌธ๋ฒ์ JavaScript ์ฝ๋ ๋ด๋ถ์ ์จ์ฃผ๋ฉด ๊ทธ๊ฒ์ด ๋ฐ๋ก JSX .js ํ์ผ ์ด๋์์๋ ํ์ํ ๊ณณ์ ์์ฑํด์ฃผ์ธ์. ๋ณ์์ ์ ์ฅํ ์๋ ์๊ณ , ํจ์์ ์ธ์๋ก ๋๊ธธ ์๋ ์๋ค.
const hi = <p>Hi</p>; const myFavorite = { food: <li>์๋ฌ๋</li>, animal: <li>dog</li>, hobby: <li>programming</li> };
JSX attribute
ํ๊ทธ์ attribute(์์ฑ)์ ์ฃผ๊ณ ์ถ์ ๋๋ ํญ์ "" ์๋ฐ์ดํ๋ก ๊ฐ์ธ์ฃผ์ธ์. attribute๋ฅผ ์ถ๊ฐํ๊ณ ์ถ์ ๋๋ ์ค์ HTML์์ ์ฐ๋ attribute name(์์ฑ๋ช )๊ณผ ๋ค๋ฅผ ์ ์์ผ๋ react ๊ณต์๋ฌธ์๋ฅผ ์ฐธ๊ณ ํด์ฃผ์ธ์.
์๋ฅผ ๋ค์ด, class๋ฅผ ์ฃผ๊ณ ์ถ์ ๋ ์๋ ์์ฑ๋ช ์
class
์ด์ง๋ง JSX์์๋className
์ ์ฌ์ฉํด์ผ ํฉ๋๋ค.const hi = <input readOnly={true} />; const myFavorite = { food: <li>์๋ฌ๋</li>, animal: <li>dog</li>, hobby: <li className="list-item">programming</li> };
Self-Closing Tag
๊ทธ๋ฆฌ๊ณ JSX์์๋ ์ด๋ค ํ๊ทธ๋ผ๋ self closing tag๊ฐ ํญ์ ๊ฐ๋ฅํฉ๋๋ค.
<input>
๊ณผ ๊ฐ์ด ํ๋์ ํ๊ทธ๊ฐ ์์์ธ ๊ฒฝ์ฐ์๋<input />
์ ๊ฐ์ด ํญ์/
์ผ๋ก ๋๋ด์ค์ผ ํฉ๋๋ค.
<div />
์<div></div>
๋ ๊ฐ์ ํํ์ ๋๋ค.
Nested JSX
์๊ดํธ๋ก ๊ฐ์ธ๊ธฐ
const good = ( <div> <p>hi</p> </div> );
์ค์ฒฉ๋ ์์๋ฅผ ๋ง๋ค๋ ค๋ฉด () ์๊ดํธ๋ก ๊ฐ์ธ์ฃผ์ธ์!
ํญ์ ํ๋์ ํ๊ทธ๋ก ์์
const wrong = ( <p>list1</p> <p>list2</p> );
์์ ๊ฐ์ด ์ ์ผ ์ฒ์ ์์๊ฐ sibling์ด๋ฉด ์๋ฌ ๋ฐ์.
๋ฌด์กฐ๊ฑด ํ๋์ ํ๊ทธ๋ก ๊ฐ์ธ์ ธ์ผ ํ๋ค. ์๋์ ์ฝ๋์ฒ๋ผ ์ฒซ ์์๋ ํ๋์ ํ๊ทธ๋ก ๊ฐ์ธ์ฃผ๊ธฐ.<> </>
๋ okay!const right = ( <div> <p>list1</p> <p>list2</p> </div> );
Rendering
html ์์(element), ๋๋ React ์์ ๋ฑ์ ์ฝ๋๊ฐ ๋์ผ๋ก ๋ณผ ์ ์๋๋ก ๊ทธ๋ ค์ง๋ ๊ฒ์ ๋ ๋๋ง(rendering) ์ด๋ผ๊ณ ๋งํฉ๋๋ค.
React ์์๊ฐ DOM node์ ์ถ๊ฐ๋์ด ํ๋ฉด์ ๋ ๋๋๋ ค๋ฉด
ReactDOM.render
ํจ์๋ฅผ ์ฌ์ฉํฉ๋๋ค. ์ฒซ ๋ฒ์งธ ์ธ์์๋ JSX๋ก React ์์๋ฅผ ์ธ์๋ก ๋๊ธฐ๊ณ , ๋ ๋ฒ์งธ ์ธ์๋ ํด๋น ์์๋ฅผ ๋ ๋ํ๊ณ ์ถ์ container(๋ถ๋ชจ์์)๋ฅผ ์ ๋ฌํฉ๋๋ค.ReactDOM.render( <h1>Hello, world!</h1>, document.getElementById('root') );
React๊ณต์ ๋ฌธ์์์๋ JSX ์ฌ์ฉ์ด ํ์๋ ์๋๋ผ๊ณ ํ์ง๋ง ๋๋ค์์ ์ฌ์ฉ์๊ฐ ์ฌ์ฉํ๋ ๋ฆฌ์กํธ์ ๊ธฐ๋ณธ ๋งํฌ์ ์ธ์ด๋ผ๊ณ ์๊ฐํ๋ฉด ๋๋ค๋ ๊ฒฐ๋ก !