지난포스팅 에서 클래스형 컴포넌트 기반의 라이프 사이클에 대해 알아보았습니다.
이번 시간에는 함수형 컴포넌트와 Hooks(useState, useEffect)에 대해 살펴봅니다.
import React from "react"
const funcComponent = () => {
return <div>이건 함수형 컴포넌트</div>
}
export funcComponent;
import React, { useState } from 'react';
function Example() {
const [count, setCount] = useState(0);
return (
<div>
<p>You clicked {count} times</p>
<button onClick={() => setCount(count + 1)}>
Click me
</button>
</div>
);
}
class Example extends React.Component {
constructor(props) {
super(props);
this.state = {
count: 0
};
}
render() {
return (
<div>
<p>You clicked {this.state.count} times</p>
<button onClick={() => this.setState({ count: this.state.count + 1 })}>
Click me
</button>
</div>
);
}
}
(root)/src/Count.js
import React, { useState } from 'react'; 👈
const Count = () => {
const [count, setCount] = useState(0); 👈 👈
return (
<div>
<p>You clicked {count} times</p> 👈 👈 👈 👈
<button onClick={() => setCount(count + 1)}> 👈 👈 👈
Click me
</button>
</div>
);
}
export default Count;
먼저 useState를 사용하기 위해선 👈 와 같이 리액트 패키지에서 useState 함수를 불러와야 합니다.
useState(param)를 사용할 때는 파라미터(param)에 상태의 기본 값을 넣어주어서 호출해 줍니다.
👈 👈 에서 useState(0) 은 상태의 기본 값을 0으로 주겠다는 의미입니다.
이후 2개의 배열이 반환되는데요. 첫번째는 현재 상태 값이며, 두번째는 setter 함수 입니다. [count, setCount] 에서는 count가 현재 상태 값, setCount가 setter 함수입니다.
👈 👈 👈 를 보시면 onClick 이벤트 발생시 함수가 실행되며 setCount(setter 함수)가 count(현재 상태)에 +1을 합니다.
이러한 원리로 👈 👈 👈 👈 에서 {count}의 상태가 클릭마다 증가하게 됩니다.
(root)/src/App.js
import React from "react";
import Count from "./Count";
const App = () => {
return (
<div className="App">
<Count />
</div>
);
};
export default App;
리엑트 컴포넌트에는 props와 state가 있습니다. 컴포넌트의 인터렉션한 변화를 위해선 state 값을 변화시켜주어야 합니다.
클래스형 컴포넌트는 props와 state를 모두 사용할 수 있지만 사용하는 많은 사람들이 복잡성을 호소 했습니다.
함수형 컴포넌트가 직관적이고 사용하기 수월했지만 state의 상태를 관리할 수 없다는 큰 한계가 있었습니다.
하지만 v16.8버전 부터는 hooks가 도입되어 함수형 컴포넌트에서도 상태를 관리할 수 있게 되었습니다.
useState 함수는 그중 가장 기본적인 기능을 탑재한 상태 관리 함수이며, 호출 당시 파리미터에 상태 기본값을 넣어줍니다. 그리고 배열을 반환하며 첫번째 원소는 현재 상태 값, 두번째 원소는 setter 함수를 반환합니다.
+) hooks 네이밍을 살펴보자면 '끌어 당겨오다' 정도로 해석하면 될 것입니다. 기존의 함수형에서 상태를 관리할 수 없었지만 hooks라는 패키지의 '매직'으로 사용할 수 있게 되었습니다. 이 '매직'이 일종의 상태 관리 기능을 끌어당겨 와준다 이런 의미로 느낌을 가져가시면 됩니다.
++) 소프트웨어 공학에서 지칭하는 hook이 어원에 더 적합해 보입니다. 그런 hook들의 모임이 hooks인 것이죠.
소프트웨어 공학의 hook
후킹(영어: hooking)은 소프트웨어 공학 용어로, 운영 체제나 응용 소프트웨어 등의 각종 컴퓨터 프로그램에서 소프트웨어 구성 요소 간에 발생하는 함수 호출, 메시지, 이벤트 등을 중간에서 바꾸거나 가로채는 명령, 방법, 기술이나 행위를 말한다. 이때 이러한 간섭된 함수 호출, 이벤트 또는 메시지를 처리하는 코드를 훅(영어: hook)이라고 한다.
리엑트 공식홈페이지 설명
Hook은 함수 컴포넌트에서 React state와 생명주기 기능(lifecycle features)을 “연동(hook into)“할 수 있게 해주는 함수입니다.
https://reactjs.org/docs/hooks-state.html
https://react.vlpt.us/basic/07-useState.html