Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- ec2
- tcp
- 브라우저
- 이미지 최적화
- aws
- 성능 개선
- https
- SSL
- webp
- 자동화
- 렌더링 과정
- 리버스 프록시
- 이미지 포맷 변경
- TLS
- nextJS
- CI
- DNS
- certbot
- gitgub actions
- pm2
- workflow
- 검색엔진최적화
- 인증서
- SSH
- 무중단
- 배포
- 로드 밸런싱
- 이미지 압축
- nginx
- 3-Way HandShake
Archives
- Today
- Total
개발일기
useEffect 알아보기 본문
1. useEffect
리액트 컴포넌트가 렌더링 될 때마다 특정 작업을 실행할 수 있도록 하는 Hook 이다.
useEffect는 컴포넌트가 mount(화면에 첫 렌더링),update(다시 렌더링),unmount(화면에서 사라질때) 됐을때,
특정 작업을 처리할 수 있다.
2.useEffect 사용 예제 1
import React, { useEffect, useState } from "react";
const App = () => {
const [count, setCount] = useState(0);
const [name, setName] = useState("");
const handleCountUpdate = () => {
setCount(count + 1);
};
//렌더링마다 매번 실행됨 - 렌더링 이후
useEffect(() => {
console.log("렌더링");
});
//처음 화면이 렌더링 될때만 실행
useEffect(() => {
console.log("렌더링");
},[]);
// 마운팅 + count가 변화할때마다 실행됨
useEffect(() => {
console.log("count가 변할때 마다 실행");
}, [count]);
//마운팅 + name이 변경될때마다 실행됨
useEffect(() => {
console.log("count가 변할때 마다 실행");
}, [name]);
return (
<div>
<button onClick={handleCountUpdate}>Update</button>
<span>Count : {count} </span>
<input
type="text"
value={name}
onChange={(e) => setName(e.target.value)}
></input>
</div>
);
};
export default App;
2.useEffect 사용 예제 2
App.jsx
import logo from './logo.svg';
import './App.css';
import Timer from './components/Timer';
import { useState } from 'react';
function App() {
const [toggle,setToggle] = useState(false)
return (
<div>
{toggle && <Timer/>}
<button onClick={()=>setToggle(!toggle)}>Toggle Timer</button>
</div>
);
}
export default App;
Timer.jsx
import React, { useEffect } from "react";
const Timer = (props) => {
useEffect(() => {
const timer = setInterval(() => {
console.log("타이머 돌아가는중...");
}, 1000);
return () => { //클린업 함수를 생성해야 콘솔의 타이머가 멈춤
clearInterval(timer);
console.log('타이머가 종료되었습니다.')
}
}, []);
return <div>타이머 시작</div>;
};
export default Timer;
3.useEffect 실행순서
(1) useEffect는 기본적으로 mount 이후에 이루어진다.
import './App.css';
import { useEffect } from 'react';
function App() {
console.log('렌더링1')
useEffect(()=>{
console.log("useEffect")
},[])
console.log('렌더링2')
return (
<></>
);
}
export default App;
(2) 처음 컴포넌트 렌더링시 클린업 함수는 실행되지 않는다.
import "./App.css";
import { useEffect, useState } from "react";
function App() {
const [count, setCount] = useState(0);
console.log("렌더링1");
useEffect(() => {
console.log("mount");
return () => {
console.log("unmount");
};
}, []);
console.log("렌더링2");
return (
<div>
<button onClick={() => setCount(count + 1)}>숫자증가</button>
<span>Count : {count}</span>
</div>
);
}
export default App;
(3) 클린업 함수는 state값의 변화로 인한 리렌더링 이후, useEffect의 mount가 되기 전 그 사이에 실행된다.
import "./App.css";
import { useEffect, useState } from "react";
function App() {
const [count, setCount] = useState(0);
console.log("렌더링1");
useEffect(() => {
console.log("mount");
return () => {
console.log("unmount");
};
}, [count]);
console.log("렌더링2");
return (
<div>
<button onClick={() => setCount(count + 1)}>숫자증가</button>
<span>Count : {count}</span>
</div>
);
}
export default App;
'TIL' 카테고리의 다른 글
next.js 시작하기 (yarn 사용) (0) | 2024.03.27 |
---|---|
CSR vs SSR (0) | 2024.03.25 |
리액트의 useRef 기능 두가지 (0) | 2024.03.03 |
react-router-dom(v6) 함수 실행 시 이전 페이지로 이동 (0) | 2023.12.22 |
supabase 맛보기 (0) | 2023.08.17 |