메모리 자원을 덜 사용한다는 장점
리액트 훅이 도입하면서 state와 라이프 사이클 API를 사용하게 되며 범용성 확대
일반적인 방식 / 화살표 함수 방식 선언 사용 - 실행 컨텍스트의 차이
function BlackDog() {
this.name = '흰둥이';
return {
name: '검둥이',
bark: function() {
console.log(this.name + ': 멍멍!');
}
}
}
const blackDog = new Blackdog();
blackDog.bark(); // 검둥이: 멍멍!
function WhiteDog() {
this.name = '흰둥이';
return {
name: '검둥이',
bark: () => {
console.log(this.name + ': 멍멍!');
}
}
}
const whiteDog = new Whitedog();
whiteDog.bark(); // 흰둥이: 멍멍!
클래스형 컴포넌트는 로직과 상태를 컴포넌트 내에서 구현하기 때문에 stateful
로 불리며 상대적으로 복잡한 로직을 가지고 있습니다. 반면 함수형 컴포넌트는 state를 사용하지 않고 단순하게 데이터를 받아서(props) UI에 뿌려주기 때문에 stateless
라고 합니다. 이를 Hooks를 사용하여 보완합니다.
부모 컴포넌트로부터 전달 받은 데이터 및 event handler를 객체로서 활용합니다. 따라서 자식 컴포넌트에서 데이터와 이벤트를 핸들링하여 변화하는 값에 대한 처리를 할 수 있습니다.
// 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>
// this : 해당 컴포넌트
// this.props : 해당 컴포넌트의 props 객체
// this.props.titleColor : props 객체의 특정 key(titleColor)값. 즉 "red"
</div>
);
}
}
export default State;