props에 따라 component를 실제로 구현하는 내부의 state가 철저하게 분리되어 있어야 한다. → "캡슐화/은닉화"
constructor(props) {
super(props);
//state의 초깃값 설정하기
this.state = {
number : 0
}
}
👇 컴포넌트 생성자 메서드 : 클래스형 component에서 constructor를 작성할 때 반드시 super(props) 를 호출해주어야 함!
component가 실행될 때, render()함수보다 먼저 실행되면서, 초기화시켜주고 싶은 component를 초기화시켜주고 싶은 코드는 constructor안에다가 코드를 작성한다.
✔ 이 때 this.state값에는 초기값을 설정해준다.
✔ 컴포넌트의 state는 객체 형식이어야 한다.
Subject의 프로퍼티 값으로 객체를 할당하여 "state"를 만들었다.
<TOC>안에 있는 데이터를 App의 내부 State를 TOC에 주입해 줌으로써 자동으로 React가 바뀌는 것을 알 수 있다.
즉, <TOC>의 부모요소가 가지고 있는 state를 이용해서 <TOC>의 내부 데이터가 바뀌게 할 수 있다.
contents라는 프로퍼티를 state에 추가해서 여러개의 데이터를 배열의 형태로 삽입한다.
this.state.contents
를 주입시켜주었다.class TOC extends Component {
render(){
let lists = [];
let data = this.props.data;
let i= 0;
while(i<data.length){
lists.push(<li><a href={"/content/"+data[i].id}>{data[i].title}</a></li>);
i = i+1;
}
return (
<nav>
<ul>
{lists}
</ul>
</nav>
);
}
}
export default TOC;
반복문이 실행될때 마다 li의 html구조를 push해준다.
✔ 여기서의 data 는 위에서 선언한 this.state.contents
이다.
아래와 같이 기존과 동일하게 정상적으로 출력됨을 볼 수 있다.