다음과 같은 코드가 있다.
let str = '외부입니다.'; function func() { str = '내부에서 외부를 바꿔버린다.' } func(); // 해당 함수는 Side Effect가 발생한다.
해당 코드는 func함수 내부에서 외부의 str 변수를 바꿔버리는 Side Effect가 발생한다.
👉 위와 같은 문제를 Effect Hook으로 해결할 수 있다.
기본 형태는 다음과 같다.
useEffect(() => {}, [종속성1, 종속성2, ...]);
1. useEffect의 첫 번째 인자는 함수다.
2. useEffect의 두 번째 인자는 종속성이다.
1. useEffect(() => {}, [종속성1, 종속성2, ...]);
2. useEffect(() => {}, []);
3. useEffect(() => {});
👉 아래와 같은 순서로 실행된다.
1. 컴포넌트 내부에서 필터링
2. 컴포넌트 외부에서 필터링
useEffect(() => { fetch(`http://서버주소/proverbs?q=${filter}`) .then(resp => resp.json()) .then(result => { setProverbs(result); }); }, [filter]);
const [isLoading, setIsLoading] = useState(true);
>
// LoadingIndicator 컴포넌트를 별도로 구현했다고 가정
return {isLoading ? <LoadingIndicator /> : <div>로딩 완료 화면</div>}
useEffect(() => { setIsLoading(true); // 로딩화면을 띄운다. fetch(`http://서버주소/proverbs?q=${filter}`) .then(resp => resp.json()) .then(result => { setProverbs(result); setIsLoading(false);// 로딩화면을 내린다. }); }, [filter]);