React에서 함수 컴포넌트와 클래스 컴포넌트의 차이 🔥
react에서 컴포넌트 선언시 사용되는 2가지 방식이 있다.
과거 클래스형 컴포넌트를 많이 사용했지만
React v16.8 이후, 함수 컴포넌트에 hook의 지원으로
현재 공식문서에서도 함수포넌트의 사용을 권장하고 있다.
import React from 'react';
import './App.css';
//기본함수
function App() {
const name = 'react';
return <div className = "react">{name}</div>
}
//화살표함수
const App = () => {
return <div className = "react">{name}</div>
}
export default App;
const + 함수
형태로 선언해줘야 한다.import React, { Component } from 'react';
)const { color, name, isSpecial } = this.props;
)import React, {Component} from 'react';
class App extends Component {
render() {
const name = 'react';
const { color, age } = this.props;
return <div className="react">{name}</div>
}
}
export default App;
this.
를 붙여줘야한다.리액트에서 함수형 컴포넌트라고 부르지 않고 함수 컴포넌트라고 부르는 이유가 무엇인가요 🔥
결론적으로 다른말이다.
리액트에는 함수형 컴포넌트가 없다.
function double(x) {
const y = x * 2;
return y;
}
console.log(double(3));
// 6
console.log(6);
// 6
함수 컴포넌트(function component)
를 설명하고 있다.function loggingDouble(x) {
const y = x * 2;
console.log(y); // Side effect!
return y;
}
console.log(loggingDouble(3));
// 6
// 6
console.log(6);
// 6
위의 함수는 반환값 외에 console.log 함수를 통해 계산 값을 출력한다. 부작용이다.
예시로 useEffect 사용이 있다. useEffect는 이름에 드러나듯 함수 컴포넌트가 부작용을 이용하는 도구다.
function ImpureFunctionComponent() {
const message = 'hello world';
useEffect(() => { document.title = message; }); // Side effect!
return (<h1>{message}</h1>);
}
//호출시 리턴값
(<h1>hello world</h1>)
=> 함수 컴포넌트는 참조 투명할 수도, 아닐 수도 있기 때문에 ‘함수형’ 수식어를 붙이는 건 오해를 일으킬 수 있다.
*참조투명 : 어떤 식을 그 식을 풀이한 값으로 대체해도 프로그램의 동작이 변하지 않는 성질을 뜻