React의 컴포넌트에서 관리하는 데이터로 크게 Props
와 State
가 있다. 이 둘은 컴포넌트에서 데이터를 관리할 때 사용하는 개념으로 굉장히 중요하므로 꼭 알고 있어야 한다.
컴포넌트는 기본적으로 다른 컴포넌트를 가질 수 있다. 이때 부모 컴포넌트에서 자식 컴포넌트로 값을 넘겨줘야 할 때가 있는데 이 때 Props를 이용해 값을 전달해줄 수 있다.
import ChildComponent from './ChildComponent';
//부모 컴포넌트 (ParentComponent.js)
function ParentComponent(){
return (
<div>
<h3>나는 부모입니다.</h3>
<div>
<h1>내 자식을 소개합니다 </h1>
//HTML 태그의 Attribute를 넣듯이 Prop을 정해주면 된다.
<ChildComponent name="민수" age={27}/>
<ChildComponent name="그랩" age={28}/>
</div>
</div>
)
}
export default ParentComponent
//자식 컴포넌트 (ChildComponent.js)
//부모 컴포넌트에서 전달해주는 Prop 값은 컴포넌트 함수의 첫 번째 인자에 전부 들어간다.
function ChildComponent(props){
const name = props.name;
const age = props.age;
return <h3>나는 {name}입니다. {age}살입니다.</h3>
}
export default ChildComponent;
💡 실제로 props에는 다양한 값들이 들어간다.
컴포넌트는 return을 통해서 UI 요소를 보여준다. 그런데 서비스를 사용하다 보면 컴포넌트의 UI를 업데이트 해줘야 하는 상황이 많이 발생한다.
이때 컴포넌트를 업데이트(렌더링)해줄 수 있도록 해주는 장치가 바로 State
이다.
💡 여기서 컴포넌트가 업데이트 된다는 것은 컴포넌트의 코드가 재실행되는 것을 의미한다.
Props는 기본적으로 부모에게 값을 전달받는다. 그리고 전달받은 Props는 컴포넌트 내에서 따로 업데이트하지 않고 정적으로 사용한다.
State
는 Props와 반대로 변화하는(동적인) 값이다. 기본적으로 state가 변경되면 컴포넌트는 새롭게 업데이트된다. (Props는 부모에게 받는 값, State는 컴포넌트 내에서 사용하는 값이다.)
state를 사용하기 위해선 React 라이브러리의 useState
를 사용하면 된다.
import React from 'react';
function TimerComponet(){
//1. time에는 기본 값으로 0이 들어간다. 신기해 보이는 문법은 ES6의 destructuring이다.
const [time, setTime] = React.useState(0)
console.log('Component 업데이트!'); // time이 업데이트될 때마다 계속 호출된다.
function updateTime(){
setTime(time+1);
}
return (
<div>
<h3>{time}초</h3>
{/* 클릭할 때마다 setTime으로 state를 업데이트해준다. */}
<button onClick={updateTime}>1씩 올려주세요</button>
</div>
)
}
export default TimerComponet;
state는 정말 많이 사용된다.