리액트의 컴포넌트 선언방식은 두가지로 나뉜다. 첫번째는 클래스형 컴포넌트, 두번째는 함수형 컴포넌트이다.
이제 이 두가지 선언방식에 대해서 알아보자.
import React, {Component} from 'react';
class App extends Component{
render(){
const {id,pass} = this.props;
return(
<>
<div className="react">아이디 : {id} </div>
<div className="react">비밀번호 : {pass} </div>
</>
);
}
}
export default App;
import React, {Component} from 'react'
class Counter extends Component {
constructor(props) {
super(props); //자바스크립트 에서는 super는 부모 클래스 생성자를 가리킨다(리액트에서는 React.Component)
this.state = {
Num : 0
};
}
render(){
const {Num} = this.state;
return(
<div>
<h1>값 : {Num}</h1>
<button
onClick={()=>{
this.setState({
Num : Num + 1
});
}}
>
+1
</button>
</div>
);
}
}
export default Counter;
import React from 'react';
const App = (id,pass) => {
return(
<>
<div className="react">아이디: {id}</div>
<div className="react">비밀번호: {pass}</div>
</>
);
}
export default App;
import React , {useState} from 'react';
const App = () => {
//첫번째 원소는 state이름, 두번째원소는 state의 값을 변경해주는 함수이름이다.
const[num, setNum] = useState(0); //useState의파라미터는 초기값이다.
const increase = () => {
setNum(num +1)
}
return (
<>
<h1>{num}</h1>
<button onClick ={increase} >+1</button>
</>
);
}
export default App;
현재 리액트 공식 매뉴얼에는 컴포넌트를 작성할때 클래스컴포넌트보다 함수형 컴포넌트를 사용하도록 권장하고있다.
함수형컴포넌트의 state와 LifeCycle사용이 불가능하다는 단점을 리액트 16버전부터 Hook이라는걸 지원하여 보완하였다.
공식 매뉴얼에서 함수형 컴포넌트를 사용하도록 권장하고있다고 하더라도 유지보수를 진행해야할 상황이 있을 수 있기때문에 클래스형 컴포넌트도 잘알아두도록하자.