이번에는 지난 포스팅에서 정리 하지 못한 component, state, props 등의 내용을 함께 설명하려고 한다.
Component를 통해 UI를 재사용 가능한 개별적인 여러 조각으로 나누고, 각 조각을 개별적으로 살펴볼 수 있다.
개념적으로는 컴포넌트는 Javascript 함수와 유사합니다. "props"라고하는 임의의 입력을 받은 후, 화면에 어떻게 표시되는지를 기술하는 React 엘리먼트를 반환합니다.
컴포넌트를 정의하는 방법이 두가지가 있는데, 이번 Foundation과 1st Project에서는 클래스형 컴포넌트를 사용하라고 한다.
class Welcome extends React.Component {
render() {
return <h1>Hello, {this.props.name}</h1>;
}
}
React가 사용자 정의 컴포넌트로 작성한 엘리먼트를 발견하면 JSX 어트리뷰트와 자식을 해당 컴포넌트에 단일 객체로 전달합니다. 이 객체를 “props”라고 합니다.
function Welcome(props) {
return <h1>Hello, {props.name}</h1>;
}
const element = <Welcome name="Sara" />;
ReactDOM.render(
element,
document.getElementById('root')
);
<Welcome name="Sara" />
엘리먼트로 ReactDOM.render()
를 호출합니다.{name: 'Sara'}
를 props로 하여 Welcome
컴포넌트를 호출합니다.Welcome
컴포넌트는 결과적으로 <h1>Hello, Sara</h1>
엘리먼트를 반환합니다.<h1>Hello, Sara</h1>
엘리먼트와 일치하도록 DOM을 효율적으로 업데이트합니다.주의: 컴포넌트의 이름은 항상 대문자로 시작합니다.
React는 소문자로 시작하는 컴포넌트를 DOM 태그로 처리합니다. 예를 들어
<div />
는 HTML div 태그를 나타내지만,<Welcome />
은 컴포넌트를 나타내며 범위 안에Welcome
이 있어야 합니다.
state란 말 그대로 컴포넌트의 상태 라고 표현할수 있다.
state는 컴포넌트 내에서 정의하고 사용한다.
아래의 예제코드는 state를 이용해 좋아요 버튼을 구현한 것이다.
class Button extends React.Component {
constructor() {
super();
this.state = {
clicked: false
}
}
render() {
return (
<div
className="btn"
onClick={()=>{this.setState({ clicked: !this.state.clicked })}}
>
{this.state.clicked ? '좋아요' : '싫어요'}
</div>
);
}
}
ReactDOM.render(
<Button />,
document.getElementById('root')
);