Defining a component
Export the component
export default
prefix๋ ๋ฆฌ์กํธ์์๋ง ์ฌ์ฉ๋๋๊ฒ ์๋ ํ์ค ์๋ฐ์คํฌ๋ฆฝํธ ๊ตฌ๋ฌธ์ด๋ค.
Define the function
function App() { }
์ผ๋ก App์ด๋ผ๋ ์๋ฐ์คํฌ๋ฆฝํธ ํจ์๋ฅผ ์ ์ํ๋ค.
๐ย ํจ์ ์ด๋ฆ์ ๋ฐ๋์ ๋๋ฌธ์๋ก ์์ํด์ผํ๋ค.
Add markup
JSX
๋ฅผ ์ฌ์ฉํ์ฌ ๋งํฌ์
์ฌ์ด์ ์๋ฐ์คํฌ๋ฆฝํธ๋ฅผ ๋ฃ์ ์ ์๋ค.
Deep Dive: Components all the way down
์ปดํฌ๋ํธ๋ ์ฌ์ฌ์ฉ์ ์ํด์๋ง ์ฌ์ฉํ๋ ๊ฒ์ ์๋๋ค. ์ปดํฌ๋ํธ๋ UI์ ๋งํฌ์
์ฝ๊ฒ ๊ตฌ์ฑํ ์ ์๋ ๋ฐฉ๋ฒ์ด๋ค. ๊ทธ๋ ๊ธฐ ๋๋ฌธ์ ์ผ๋ถ ์ปดํฌ๋ํธ๋ ํ ๋ฒ๋ง ์ฌ์ฉ๋ ์ ์๋ค.
The root component file
๋ฆฌ์กํธ์์๋ ๋ณดํต src/App.js
๊ฐ ์ต์์ ์ปดํฌ๋ํธ ํ์ผ์ด๊ณ , ์ด๋ป๊ฒ ์
์
ํ๋๋์ ๋ฐ๋ผ ๋ฌ๋ผ์ง ์ ์๋ค.
๋ง์ฝ Next.js
๊ฐ์ ํ์ผ ๋ฒ ์ด์ค ๋ผ์ฐํ
์ ํ๋ ํ๋ ์์ํฌ๋ฅผ ์ฌ์ฉํ๋ฉด ์ต์์ ์ปดํฌ๋ํธ๋ ๊ฐ ํ์ด์ง๋ง๋ค ๋ค๋ฅผ ์ ์๋ค.
Exporting and importing a component ๐ย import ํ ๋ .js ํ์ผ ํ์ฅ์๋ฅผ ์๋ตํ๋ ๊ฒ๋ ๊ฐ๋ฅํ์ง๋ง, ์๋์ ๊ฐ์ด ์์ฑํ๋ ๊ฒ์ด ๊ธฐ๋ณธ ES ๋ชจ๋์ ์๋ ๋ฐฉ์์ ๊ฐ๊น๋ค.
import Gallery from './Gallery.js';
JSX: Putting markup into JavaScript
์น์ด ๋ interactive ํด์ง๊ณ , ์ ์ ๋ก์ง์ด ์ฝํ
์ธ ๋ฅผ ๊ฒฐ์ ํ๊ฒ ๋์๋ค. ์๋ฐ์คํฌ๋ฆฝํธ๊ฐ HTML์ ์ญํ ์ ํ๊ฒ ๋ ๊ฒ์ด๋ค. ์ด๊ฒ์ด ๋ฆฌ์กํธ์์ ๋ ๋๋ง ๋ก์ง๊ณผ ๋งํฌ์
์ด ํ๋์ ์ปดํฌ๋ํธ์ ๊ฐ์ด ์๋ ์ด์ ์ด๋ค.
The Rules of JSX
Return a single root element
์ฌ๋ฌ ๊ฐ์ ์์๋ฅผ ํ๋์ ์ปดํฌ๋ํธ์์ ๋ฐํํ๊ธฐ ์ํด์๋ ํ๋์ ๋ถ๋ชจ ํ๊ทธ๋ก ๋ฌถ์ด์ผ ํ๋ค.
๋น ํ๊ทธ์ธ Fragment
๋ฅผ ์ฌ์ฉํด๋ ๋๋ค. Fragment
๋ ๋ธ๋ผ์ฐ์ HTML ํธ๋ฆฌ์ ํ์ ์ ๋จ๊ธฐ์ง ์๊ณ , ์ฆ DOM์ ์ถ๊ฐ ๋
ธ๋๋ฅผ ์ถ๊ฐํ์ง ์๊ณ ์์๋ค์ ๊ทธ๋ฃนํํ ์ ์๋ค.
return {} {} // ๋ถ๊ฐ๋ฅ
return [{}, {}] // ๊ฐ๋ฅ
return (
<>
<div className="good">parent</div>
</>
);
React.createElement(
React.Fragment,
null,
React.createElement(
'div',
{
className: 'good',
},
'parent',
),
);
Close all the tags
๋ซํ ํ๊ทธ๊ฐ ํ์์ ์ด๋ค. self-closing ํ๊ทธ๋ <img />
์ฒ๋ผ ๋ซํ์ผ ํ๋ค.
camelCase all most of the things!
JSX๋ JavaScript๋ก ๋ฐ๋๊ณ JSX๋ก ์์ฑ๋ ์์ฑ์ JavaScript ๊ฐ์ฒด์ ํค๊ฐ ๋๋ค. ์ปดํฌ๋ํธ์์ ์ด๋ฌํ ์์ฑ์ ๋ณ์๋ก ์ฐ๊ณ ์ถ์ ๊ฒฝ์ฐ, ๋ณ์ ์ด๋ฆ์ ๋ํ ์ ํ์ด ์๋ค. ์๋ฅผ ๋ค์ด ์ด๋ฆ์ ๋์(-)
๋ฅผ ํฌํจํ๊ฑฐ๋ class
์ ๊ฐ์ ์์ฝ์ด๋ฅผ ์ฌ์ฉํ ์ ์๋ค. ๊ทธ๋์ ๋ฆฌ์กํธ์์๋ HTML์ SVG์ ๋ง์ ์์ฑ๋ค์ด ์นด๋ฉ์ผ์ด์ค๋ก ์์ฑ๋์ด ์๋ค.
๐ย Historical Reason์ผ๋ก aria-*
์ data-*
์์ฑ์ ๋์๊ฐ ์๋ HTML๋ก ์์ฑ๋๋ค.
{ }
๋ก ํ ๋ฒ ๋ ๊ฐ์ธ์ ๊ฐ์ ์ ๋ฌํ๋ค.