[useEffect]
useEffect 는 react 컴포넌트가 렌더링이 될 때마다, 특정 작업을 수행할 수 있게 하는 Hook.
다음 식을 실행시키면,
import React, { useEffect, useState } from "react";
const App = () => {
const [value, setValue] = useState("");
useEffect(() => {
console.log("hello useEffect");
});
return (
<div>
<input
type="text"
value={value}
onChange={(event) => {
setValue(event.target.value);
}}
/>
</div>
);
};
인풋에 값을 입력할 때마다 useEffect 가 실행되는 것을 볼 수 있으며, 초반에 hello useEffect 가 두번 실행되는 것은, strictmode 때문.
index.js 에 있는 다음 StrictMode 를 제거하면, 하나만 출력 됨.
<React.StrictMode>
<App />
</React.StrictMode>
- input에 값을 입력한다.
- value, 즉 state가 변경된다.
- state가 변경되었기 때문에, App 컴포넌트가 리렌더링 된다.
- 리렌더링이 되었기 때문에 useEffect가 다시 실행된다.
- 1번 → 5번 과정이 계속 순환환다.
위의 순서대로 인풋 값을 입력할 때마다, useEffect 가 무한 렌더링 된다.
[의존성 배열]
위의 useEffect 를 제어할 수 있는 방식으로 의존성 배열이 있다.
[의존성배열] 이 안의 값이 바뀔 때만 useEffect를 사용한다 라고 해석한다.
// useEffect의 두번째 인자가 의존성 배열이 들어가는 곳 입니다.
useEffect(()=>{
// 실행하고 싶은 함수
}, [의존성배열])
1. 의존성배열이 빈 배열 [] 인 경우
컴포넌트를 실행할 때 딱 한번만 렌더링 하고 싶은경우 의존성 배열을 빈 배열 [] 로 작성하면 된다.
useEffect(() => {
console.log("hello useEffect");
}, []); // 비어있는 의존성 배열
2. 의존성배열에 값이 있는 경우
[value] 값이 변하기 때문에 인풋에 값을 입력할 때마다 리렌더링이 계속 됨.
useEffect(() => {
console.log("hello useEffect");
}, [value]); // value를 넣음
[clean up]
컴포넌트가 화면에서 없어질 때 동작을 하도록 하는 것.
useEffect(() => {
console.log("hello useEffect");
// clean up : 컴포넌트가 사라질 때 동작을 한다.
return () => {
console.log('나 사라져요')
}
});
'React' 카테고리의 다른 글
[React] React Hooks (useRef) (0) | 2023.06.20 |
---|---|
[React] Styled Components (0) | 2023.06.19 |
[React] React Hooks (useState) (0) | 2023.06.19 |
[React] map 메소드 적용/ 오류 해결 (0) | 2023.06.14 |
[React] Styling 적용하기 (0) | 2023.06.14 |