일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- vue 지역 컴포넌트
- KDT 프로그래머스 데브코스 프론트엔드
- 리스트 렌더링
- SCSS forward
- 다른컴퓨터에서 git사용
- vue 이벤트 수신
- 쌓임맥락
- postcss
- 리액트
- SCSS import
- SCSS use
- vue mixin
- KDT 프로그래머스
- vuex map
- 프로그래머스 K_Digital Training
- git 같은계정 다른 컴퓨터
- Vue
- 고양이 사진 검색기
- SCSS extend
- 이벤트 수식어
- nextjs사용법
- react next
- Spacer
- 프로그래머스 데브코스 프론트엔드
- 프로그래머스 프론트엔드 데브코스
- 폼 입력 바인딩
- 프로그래머스 데브코스
- intersection opserver
- flex
- netlify redirect
- Today
- Total
혼자 적어보는 노트
[React] useEffect hook 본문
UseEffect
class 컴포넌트에 사용하는 Lifecycle hook처럼
class 컴포넌트를 사용하지 않아도
componentDidMount(),
componentWillUnmount(),
componentDidUpdate() 와 같은 기능을 사용할 수 있게 만들어주는 hook이다.
Effect Hook을 사용하면 함수 컴포넌트에서도 side effect를 사용할 수 있다.
기본 사용법
useEffect(() => {
});
useEffect 안에 코드를 적으면 컴포넌트가 mount되었을 때와 이 후 update될 때 마다 실행된다.
import React, { useState, useEffect } from "react";
function Example(){
const [welcome, setWelcome] = useState(false);
useEffect( () =>{
setWelcome(true);
});
return(
<div>
{ welcome ? <h1>Welcome</h1> : null }
</div>
)
}
예를들어 welcome이 true일 때 <h1>이 보여지게 짠 코드이다.
default값은 false지만 useEffect에서 true로 설정하여 브라우저에서는 Welcome이 노출되는 것을 확인할 수 있다.
하지만 이렇게 설정하면 컴포넌트 안에서 이루어지는 모든 update에서도 해당 useEffect가 실행이 된다.
특정 State가 Update될 때만 실행하기.
useEffect( ()=>{
}, [실행 조건]);
useEffect는 첫번째 인자로 콜백함수, 두번째 인자로는 실행 조건을 입력받는데,
이렇게 뒤에 []대괄호 안에 조건을 넣어주면 특정 state가 변경 될 때만 실행이 된다.
* 해당 코드는 state를 선언한 코드 아래에 넣어주어야 함.
state를 복수로 입력하고 싶을 땐 [,] 를 사용하여 추가 가능.
const hello = () => console.log('Hello');
useEffect(hello, [실행 조건]);
위와 같이 같단하게 요청 할 수도 있다.
Mount시 1번만 실행
useEffect( ()=>{
}, []);
위와 같이 [] 빈칸으로 입력 시 해당 UseEffec안의 코드가 컴포넌트 로드 시에 한번만 실행된다.
Unmount시 실행 (컴포넌트를 벗어 났을 때)
useEffect(()=>{
return function unMount() { 코드 작성 }
});
useEffect 안에서 함수 하나를 return 해 주면
컴포넌트가 사라질 때 코드를 실행시킬 수 있다.
함수명은 마음대로 설정할 수 있다.
*useEffect return활용
function Example(){
const [welcome, setWelcome] = useState(true);
useEffect( () =>{
let welcomePopup = setTimeout(()=>{
setWelcome(false);
}, 3000);
return ()=>{
clearTimeout(welcomePopup);
}
},[]);
return(
<div>
{ welcome ? <h1>Welcome</h1> : null }
</div>
)
}
setTimeout을 사용하여 페이지 mount 후 3초 뒤에 welcome이 없어지는 코드를 작성했다.
하지만 3초 전에 페이지 이동을 하거나 등 변경 사항시에 에러가 생길 수 있는데
return을 이용하여 unmount시에 clearTimeout을 사용하여 초기화를 해 주었다.
이와 같이 페이지 이동시 초기화 및 다른 설정을 해주어야 하는 것들에 대해 응용하여 사용하면 될 것 같다.
좀 더 자세한 것은 아래의 링크
https://ko.reactjs.org/docs/hooks-effect.html
'React' 카테고리의 다른 글
React에서 Redux사용 2 - useSelector / useDispatch hook (0) | 2021.11.16 |
---|---|
[React] useContext hook (0) | 2021.11.16 |
[React] useParams 활용 (0) | 2021.11.09 |
[React] input의 상태 관리 (0) | 2021.11.04 |
[React] 삼항연산자를 사용한 클릭 이벤트 (0) | 2021.11.03 |