useEffect를 사용할 때,
의존성 배열을 이용해서 검사할 값을 따로 둘 수 있다.
import React, { useState, useEffect} from "react";
function Counter() {
const [count, setCount] = useState(0);
const [keyword, setKeyword] = useState("");
console.log("I will print all the time.");
const onClick = () => setCount((prev) => prev + 1);
const onChange = (event) => setKeyword(event.target.value);
useEffect(() => {
console.log("CALL THE API.....");
}, []);
useEffect(() => {
if(keyword !== "" && keyword.length > 5)
console.log("I will print when 'keyword' changes.");
}, [keyword]);
useEffect(() => {
console.log("I will print when 'count' changes.");
}, [count]);
return (
<div>
<h1>{count}</h1>
<button onClick={onClick}>Click Me !</button>
<input value={keyword} type="text" onChange={onChange} placeholder="What you want to find?"/>
</div>
);
}
export default Counter;
코드가 조금 길지만 잘 살펴보자.
상태값으로 count
와 keyword
가 있고,
useEffect를 이용한 함수가 3개 있다.
최초에 렌더링(즉, 마운트됐을때)됐을 때만 실행된다.
코드상에서 "CALL THE API....."
는 한번만 출력될 것이다.
해당 상태값이 변경될 때마다 useEffect()의 부수함수가 실행된다.
주의해야할 것이,
변경될때만이 아니라, 처음에 mount될 때도 실행된다.
의존성배열에 특정값을 넣어준 경우,
모두 실행된다.
의존성배열 자체를 생략한 경우, 리렌더링될 때마다 실행된다.
따라서 위 코드를 실행한 결과는 아래와 같다.
쓸 일이 그렇게 많지 않은 함수라고 한다.
하지만 알아두면 좋기 때문에 추가로 작성한다.
컴포넌트가
실행하고 싶은 함수가 있을 수 있다.
이 때 useEffect 에서는 함수를 반환 할 수 있다. 이를 cleanup 함수라고 부른다.
deps 가 비어있는 경우에는 컴포넌트가 사라질 때 cleanup 함수가 호출된다.
의존성 배열로 빈 배열을 넣어준다.
의존성배열에 검사하고 싶은 값을 넣어준다.