훅은 갈고리, 낚시바늘 등을 뜻하는 영어 단어이다. react에서의 훅은 갈고리를 뜻하는건 아니지만, 갈고리와 같은 기능을 하기 때문에 연관지어 생각하면 좋다. react의 훅은 function component에서 배우는 개념인데, class component와는 쓰임새가 다르다. 왜 페이스북 개발자들은 function을 사용하기 시작했을까? 그 이유는 다음과 같다.
따라서 function component를 사용하는것이 더 쉽고 코드를 이해하는데 도움이 된다.
// 나쁜예
import React, { useState } from "react";
function Hooks(props) {
if (!props.isExist) {
const [state, setState] = useState(); // Error!
}
const [state2, setState2] = useState(); // Error!
}
일반 javascript 함수에서는 Hook을 호출해선 안된다.(custom Hook 내에서는 호출 👌)
useState는 다음과 같이 사용하면되는데, 이 함수는 상태 유지 값과 그 값을 갱신하는 함수를 반환한다. 최초로 렌더링을 하는 동안 반환된 state는 첫 번째 전달된 인자의 값과 같다.
const [state, setState] = useState(initialState);
useEffect는 함수 컴포넌트 내에서 side effects를 수 행할 수 있게 해준다.(componentDidMount, componentDidUpdate, componentWillUnmount가 하나의 API로 통합된것 🤩)
useEffect(function);
useEffect(() => {}, [count]) // 의존성 배열 (배열 안에 담긴 값들을 추적, 그때 마다 업데이트)
class의 setState 대신 useEffect를 사용하면 전달된 함수는 화면에 렌더링이 된 후에 수행하게된다.(어떤 값이 변경되었을 때만 실행되게 할 수도 있다.)
//인자로 받아와야하는것은 props가 객체로 넘어옴
//const {name, age, id} = this.props;
function Mosters({name, age, id}){
//state
const [monsters, setMonsters] = useState([]);
const [userInput, setUserInput] = useState("");
//componentDidMount -> 첫 번째 렌더 이후에만하라는것
useEffect(()=> {
fetch("주소~")
.then((res) => res.json());
.then((res) => setMonsters(res);
}, []);
const handleChange = (e) => {
setUserInput(e.target.value);
};
return(
<div className="Mosters">
<SearchBox handleChange={handleChange} />
<CardList monsters={filterdMonsters} />
</div>
)
}
👉 또스터가 기억이 안난다면? 또스터(class component)