리액트 컴포넌트에서 다루는 데이터는 두가지, props와 state!
- props는 부모 컴포넌트가 자식 컴포넌트에게 주는 값 (위에서 아래로만 물려줄 수 있고, 받아온 props는 직접 수정할 수 없다!) - state는 컴포넌트 내부에서 선언되며, 내부에서 값 변경 가능! 은닉된 정보!
아래 코드를 보면 부모 컴포넌트에 존재하는 state값을 this.state
를 통해 자식 컴포넌트로 속성값으로 넘겨줬다.
// Parent.js
import React from 'react';
import Child from '../pages/Children/Children';
class Parent extends React.Component {
constructor() {
super();
this.state = {
color: 'red'
};
}
render() {
return (
<div>
<h1>Parent Component</h1>
<Child titleColor={this.state.color}/>
</div>
);
}
}
export default State;
// Child.js
import React from 'react';
class Child extends React.Component {
render() {
// console.log(this.props);
return (
<div>
<h1 style={{color : this.props.titleColor}}>Child Component</h1>
</div>
);
}
}
export default State;
<h1 style={{color : this.props.titleColor}}>Child Component</h1>
// this : 해당 컴포넌트
// this.props : 해당 컴포넌트의 props 객체
// this.props.titleColor : props 객체의 특정 key(titleColor)값. 즉 "red"
// Parent.js
import React from 'react';
import Child from '../pages/Children/Children';
class Parent extends React.Component {
constructor() {
super();
this.state = {
color: 'red'
};
}
handleColor = () => {
this.setState({
color: 'blue'
})
}
render() {
return (
<div>
<h1>Parent Component</h1>
<Child titleColor={this.state.color} changeColor={this.handleColor}/>
</div>
);
}
}
export default State;
// Child.js
import React from 'react';
class Child extends React.Component {
render() {
// console.log(this.props);
return (
<div>
<h1 style={{color : this.props.titleColor}}>Child Component</h1>
<button onClick={this.props.changeColor}>Click</button>
</div>
);
}
}
export default State;
위 코드는 아래와 같은 순서로 실행된다.
1. onClick 이벤트 발생시 this.props.changeColor
를 통해 부모 컴포넌트로부터 전달받은 handleColor
함수 실행
2. handleColor
함수 실행시 setState함수 호출 -> 색상 값 변경
3. render()함수 호출
4. <Child />
컴포넌트에 변경된 state데이터 전달
5. this.props.titleColor
로 색상을 지정하는 h1타이틀 색상 변경
import React from 'react';
class State extends React.Component {
constructor() {
super();
this.state = {
color: 'red'
};
}
render() {
return (
<div>
<h1>Class Component | State</h1>
</div>
);
}
}
export default State;
this.state = {
color: 'red'
};
state에서 상태값을 설정하는 이유는 컴포넌트 안의 요소에서 그 상태값을 반영해서 데이터가 바뀔 때마다 효율적으로 UI에 나타내기 위함이다!!!!
import React, { Component } from 'react';
class State extends Component {
constructor() {
super();
this.state = {
color: 'red',
};
}
handleColor = () => {
this.setState({
color: 'blue'
})
}
render() {
return (
<div>
<h1 style={{ color: this.state.color }}>Class Component | State</h1>
<button onClick={this.handleColor}>Click</button>
</div>
);
}
}
export default State;