goal
컴포넌트 구성요소
1. property : 상위 컴포넌트에서 하위 컴포넌트로 전달되는 읽기 전용 데이터
2. state : 컴포넌트의 상태를 저장하고 변경할 수 있는 데이터
3. context : 부모 컴포넌트에서 생성하여 모든 자식 컴포넌트에 전달하는 데이터
2. state 상태
- 컴포넌트 내부에서는 값을 바꿀 수 없다. 그렇다면 "값을 바꿔야 하는 경우"에는? 여기서 state가 필요하다.
- 리액트에서는 컴포넌트의 상태를 관리하기 위해 state를 사용한다.
- state는 "값을 저장하거나 변경할 수 있는 객체"로 보통 이벤트와 함께 사용된다.
state 사용시 주의사항!
- 생성자(constructor)에서 초기화 해야 한다.
- state값을 변경할 때는 setState()함수 (상태 관리 함수) 를 사용해야 한다.
- setState() 함수는 비동기로 처리되며, setState() 코드 이후로 연결된 함수들의 실행이 완료된 시점에 화면 동기화 과정을 거친다.
import React from 'react';
class StateExample extends React.Component {
constructor(props) {
super(props);
this.state = {
loading : true,
formData : "no data"
}
this.handleData = this.handleData.bind(this);
console.log(this.handleData)
console.log("this.handleData------------")
setTimeout(this.handleData, 4000);
}
handleData(data) {
console.log(data)
console.log("data -----------------------")
this.setState((preState) => ({
loading : false,
formData : data + preState.formData
}))
}
handleData() {
const data = "new data"
const {formData} = this.state
this.setState({
loading : false,
formData : data + formData
})
console.log("loading값", this.state.loading)
}
render() {
return (
<div>
{/* state 데이터는 this.state로 접근 가능하다. */}
<div>로딩중 : {String(this.state.loading)}</div>
<div>결과 : {this.state.formData}</div>
</div>
);
}
}
export default StateExample;