컴포넌트란 재사용 가능한 UI 조각을 의미한다.

// html div 태그로 인식
const element = <div />;
// 컴포넌트로 인식
const element = <Cat name="겨울" />;
// 일반 함수로 정의
function Header() {
return <header>logo</header>;
}
export default Header;
// 화살표 함수로 정의
const Header = () => {
return <header>logo</header>;
};
export default Header;
// 클래스 컴포넌트로 정의
import React from 'react';
class Header extends React.Component {
render() {
return <header>logo</header>;
}
}
export default Header;
리액트의 모든 클래스 컴포넌트는 React.Component를 상속받아서 정의해야 한다.
상속이라는 것은 부모 클래스의 기능을 그대로 물려받는 것을 의미한다.
위 예제에서는 React.Component라는 클래스를 상속받아서 Header 클래스를 만들었고,
이는 React.Component를 상속받았기 때문에 리액트 컴포넌트가 된다.
<!-- index.html -->
<div id="wrap">
<header>
<h1>logo</h1>
</header>
<nav>
<ul>
<li>
<a href="/">Home</a>
</li>
<li>
<a href="/">About</a>
</li>
<li>
<a href="/">SignIn</a>
</li>
</ul>
</nav>
<main>
<section>
<h2>섹션1</h2>
<p>섹션1 컨텐츠</p>
</section>
<section>
<h2>섹션2</h2>
<p>섹션2 컨텐츠</p>
</section>
</main>
<footer>footer</footer>
</div>
// App.js
import React from 'react';
function Header() {
return (
<header>
<h1>logo</h1>
</header>
);
}
function Nav() {
return (
<nav>
<ul>
<li>
<a href="/">Home</a>
</li>
<li>
<a href="/">About</a>
</li>
<li>
<a href="/">SignIn</a>
</li>
</ul>
</nav>
);
}
function Section() {
return (
<section>
<h2>섹션1</h2>
<p>섹션1 컨텐츠</p>
</section>
);
}
function Footer() {
return <footer>footer</footer>;
}
function App() {
return (
<div id="wrap">
<Header />
<Nav />
<main>
<Section />
</main>
<Footer />
</div>
);
}
export default App;
// App.js
import React from 'react';
//... 생략 ...
function App() {
return (
<div id="wrap">
<Header />
<Nav />
<main>
<Section />
<Section />
</main>
<Footer />
</div>
);
}
export default App;
컴포넌트는 다른 컴포넌트를 포함할 수 있다.
컴포넌트를 조합하여 화면을 구성할 수 있다.
Header 컴포넌트에 Nav 컴포넌트를 포함시켜 구조를 변경할 수 있다.
// App.js
import './styles.css';
function Header() {
return (
<header>
<h1>logo</h1>
<Nav />
</header>
);
}
function Nav() {
return (
<nav>
<ul>
<li>
<a href="/">Home</a>
</li>
<li>
<a href="/">About</a>
</li>
<li>
<a href="/">SignIn</a>
</li>
</ul>
</nav>
);
}
// ... Section 컴포넌트 생략 ...
export default function App() {
return (
<div id="wrap">
<Header />
<main>
<Section />
<Section />
</main>
<Footer />
</div>
);
}
// Header.jsx
import React from 'react';
function Header() {
return (
<header>
<h1>logo</h1>
<Nav />
</header>
);
}
export default Header;
// Nav.jsx
function Nav() {
return (
<nav>
<ul>
<li>
<a href="/">Home</a>
</li>
<li>
<a href="/">About</a>
</li>
<li>
<a href="/">SignIn</a>
</li>
</ul>
</nav>
);
}
export default Nav;
// Section.jsx
function Section() {
return (
<section>
<h2>섹션1</h2>
<p>섹션1 컨텐츠</p>
</section>
);
}
export default Article;
// App.js
export default function App() {
return (
<div id="wrap">
<Header />
<main>
<Section />
<Section />
</main>
<Footer />
</div>
);
}
export default App;
// index.js
import React from 'react';
import ReactDOM from 'react-dom';
import App from './App';
ReactDOM.render(<App />, document.getElementById('root'));