오늘은 리액트의 꽃이라고 할 수 있는 components와 props를 배워보려고 합니다.
공식 문서를 참고하며 공부하면 더욱 도움을 받을 수 있습니다.
만약 App이라는 함수가 returngksms React element가 많아진다면 코드를 파악하는데 많은 시간이 걸리게 될 것입니다.
이런 경우 컴포넌트 단위로 분리를 할 수 있습니다
아래 예시로는 Header라는 컴포넌트로 분리를 할 수 있습니다
(컴포넌트를 만들 때는 항상 대문자로 시작해야합니다.)
import logo from './logo.svg';
import './App.css';
function App() {
return (
<div className="App" tabIndex="0">
----------------------
<header className="App-header">
<img src={logo} className="App-logo" alt="logo" />
<p>
Edit <code>src/App.js</code> and save to reload.
</p>
<a
className="App-link"
href="https://reactjs.org"
target="_blank"
rel="noopener noreferrer"
>
Learn React
</a>
</header>
-------------------------//컴포넌트
</div>
);
}
export default App;
src > components 폴더 안에 Header.js파일을 생성해줍니다.
Header.js
import React from "react"
import logo from '../logo.svg';
export default function Header() {
return (
<header className="App-header">
<img src={logo} className="App-logo" alt="logo" />
<p>
Edit <code>src/App.js</code> and save to reload.
</p>
<a
className="App-link"
href="https://reactjs.org"
target="_blank"
rel="noopener noreferrer"
>
Learn React
</a>
</header>
)
}
App.js
import './App.css';
import Header from './components/Header'
function App() {
return (
<div className="App">
<Header />
</div>
);
}
export default App;
function Welcome(props) {
return <h1>Hello, {props.name}</h1>;
}
class Welcome extends React.Component {
render() {
return <h1>Hello, {this.props.name}</h1>;
}
}
React의 관점에서 볼 때 위 두 가지 유형의 컴포넌트는 동일합니다. class는 몇 가지 추가 기능이 있습니다.
최근에는 거의 함수컴포넌트를 사용하는 추세입니다.
이전까지는 DOM 태그만을 사용해 React 엘리먼트를 나타냈습니다.
const element = <div />;
React 엘리먼트는 사용자 정의 컴포넌트로도 나타낼 수 있습니다.
const element = <Welcome name="Sara" />;