React 에서 컴포넌트를 만들 때 함수형, 클래스형 총 2가지 방식이 있다.
기존에는 클래스형 컴포넌트를 사용했지만, react v 16.8 이후로Hook
이 지원되며 함수형 컴포넌트로 사용할 것을 권하고 있다
이 두가지 방식의 차이점을 알아보자
class App extends React.Component {
render() {
const name = 'class';
return <div>{name}</div>
}
}
const App = () => {
const name = 'function';
return <div>{name}</div>
}
state?
- 컴포넌트 내부에서 바뀔 수 있는 값
class App extends React,.Component {
constructor (props) {
super(props)
this.state = {
test1: [],
test2: '',
test3: 10
}
}
testFunction = () => {
this.setState({test3: test3 + 1})
}
render() {
const name = 'class'
return <div>{name}</div>
}
}
const App = () => {
const [test1, setTest1] = useState([])
const [test2, setTest2] = useState('')
const [test3, setTest3] = useState(0)
const testFunction = () => {
setTest3(test3 + 1)
}
const name = 'function'
return (
<div>
{name}
</div>
)
}
props ?
- 컴포넌트의 속성을 설정한다
- 읽기 전용. 수정할 수 없다
- 모든 컴포넌트는 자신의 Props 를 다룰때 반드시 순수함수처럼 동작해야 한다
class App extends Component {
render() {
const {age, name} = this.props
return <div>{name}의 나이는 {age}살 입니다</div>
}
}
const App = ({name, age}) => {
const test = 'function'
return (
<div>
{name}의 나이는 {age}살 입니다
</div>
)
}
class App extends React.Component {
constructor (props) {
super (props)
this.state = {
number: 1
}
}
handleBtn = () => {
this.setState({number : number + 1})
}
render () {
return (
<div>
<button onClick={this.handleBtn}> 추가 버튼</button>
</div>
)
}
}
const App = () => {
const [number, setNumber] = useState(1)
const handleBtn = () => {
setNumber(number + 1)
}
return (
<div>
<button onClick={handleBtn}> 추가 버튼</button>
</div>
)
}