React Hook(낚아채오기) 덕분에 Class 컴포넌트에서만 쓰던걸 Funtion 컴포넌트에서 쓸 수 있게됌
굳이 문법이 복잡한 Class 컴포넌트를 사용할 필요가 X
useState는 State 기능을 낚아채오는 Hook
useRef는 Reference 기능을 낚아채오는 Hook
🍃 특징
function getInput() {
const [input, setInput] = useState(""); // 오류 발생
const onChange = (e) => {
setInput(e.target.value);
}
return [input, onChange];
}
const Hook = () => {
const [input, onChange] = getInput();
return (
<div>
<input value={input} onChange={onChange} />
</div>
input을 만들때마다 입력값을 받기위해 input, onChange를 작성하고 가져와서 달아야함
⇒ 번거롭다!
근데 이 코드는 오류가 발생함
React Hooks는 React 컴포넌트 내부이거나, Custom Hook 내부에서만 호출가능하기때문
이건 일반 js 내부
🍃 Custom Hook 작성
function useInput() {
const [input, setInput] = useState("");
const onChange = (e) => {
setInput(e.target.value);
}
return [input, onChange];
}
const Hook = () => {
const [input, onChange] = useInput();
return (
<div>
<input value={input} onChange={onChange} />
</div>
함수 앞에
use라는 접두어만 써주면 됌! ⇒ Custom Hook 완성
컴포넌트마다 반복되어서 동작하는 로직
커스텀 훅을 만들어서 분리해줄 수 있음
여러번 반복해서 사용 가능
보통 컴포넌트랑 같은 파일에 두진않고, src 디렉토리 아래에 hooks라는 별도의 폴더를 만들어서 Hook의 이름으로 파일을 두는게 보통!
import {useState} from "react";
function useInput() {
const [input, setInput] = useState("");
const onChange = (e) => {
setInput(e.target.value);
}
return [input, onChange];
}
export default useInput;
import useInput from "./../hooks/useInput";
const Hook = () => {
const [input, onChange] = useInput();
return (
<div>
<input value={input} onChange={onChange} />
</div>