리액트에서는 모든 페이지가 컴포넌트로 구성되어있으며, 하나의 컴포넌트는 또 여러개의 컴포넌트의 조합으로 이루어질 수 있다.
Props
react element
props
)의 입력을 받아 그에 맞는 react element
를 생성하여 리턴 → `react component비유해보자면,
Component
Element
Component
의 속성element
를 생성props
를 직접 바꿀 수 없으며, 같은 props
에 대해 항상 같은 결과를 리턴해야함props
넣을 수 있음function App(props){
return (
<Profile
name="밍"
introduction="안녕하세요"
viewCount={1500}
/>
);
)
{
name: "밍",
instroduction: "안녕하세요",
viewCount: 1500
}
Welcome
이라는 함수 컴포넌트 예시function Welcome(props){
return <h1> 안녕, {props.name}</h1>;
}
React.Component
를 상속받아서 만듦class Welcome extends React.Component {
render(){
return <h1>안녕, {this.props.name}</h1>;
}
}
const element = <Welcome name="밍" />;
- `Component`안에 또 다른 `Component`를 쓸 수 있음
- 복잡한 화면을 여러 `Component`로 나누어 구현 가능
function Welcome(props){
return <h1>Hello, {props.name}</h1>;
}
function App(props){
return (
<div>
<Welcome name="Mike" />
<Welcome name="Steve" />
<Welcome name="Jane" />
</div>
)
}
ReactDOM.render(
<App />,
document.getElementById('root')
);
function Comment(props){
return (
<div className="comment">
<div className="user-info">
// 이 부분을 추출하여 별도의 컴포넌트를 생성
<img className="avatar">
src={props.author.avatarUrl}
alt={props.author.name}
/>
</div>
</div>
)
}
Avatar
컴포넌트function Avatar(props) {
return (
<img className="avatar"
src={props.user.avatarUrl}
alt={props.user.name}
/>
);
}
function Comment(props){
return (
<div className="comment">
<div className="user-info">
// 변경된 부분
<Avatar user={props.author} />
<div className="user-info-name">
{props.author.name}
</div>
</div>
)
}
function Comment(props){
return (
<div className="comment">
// 이 부분 추출
<div className="user-info">
<Avatar user={props.author} />
<div className="user-info-name">
{props.author.name}
</div>
</div>
)
}
UserInfo
컴포넌트function UserInfo(props){
return(
<div className="user-info">
<Avatar user={props.user} />
<div className="user-info-name">
{props.user.name}
</div>
</div>
);
}
function Comment(props){
return (
<div className="comment">
// 이 부분 추출
<UserInfo user={props.author} />
</div>
)
}