티스토리 뷰
UseEffect
import { useEffect, useState } from "react";
function App() {
const [counter, setValue] = useState(0);
const [keyword, setKeyword] = useState("");
const onClick = () => setValue((prev) => prev + 1);
const onChange = (event) => setKeyword(event.target.value)
console.log("i run all the time...");
return (
<div>
<h1>{counter}</h1>
<button onClick={onClick}>click me</button>
</div>
);
}
export default App;
버튼을 Click할 때마다 컴포너트가 Re-Rendering되어 console.log가 계속 찍히게 된다.
하지만 어떤 경우에는 한번만 실행시켜야 할때가 필요한데, 이럴때 UseEffect를 사용하면 된다!
import { useEffect, useState } from "react";
function App() {
const [counter, setValue] = useState(0);
const onClick = () => setValue((prev) => prev + 1);
console.log("i run all the time...");
useEffect(() => {
console.log("I run only once.")
}, []);
return (
<div>
<h1>{counter}</h1>
<button onClick={onClick}>click me</button>
</div>
);
}
export default App;
useEffect 안에 있는 코드는 한번만 실행된다.
state 값의 변화를 감지하여 실행시킬 수도 있다.
useEffect의 2번째 인자에 state 변수를 넣어주면 해당 변수의 변경을 감지하여 함수를 실행시킨다.
import { useEffect, useState } from "react";
function App() {
const [counter, setValue] = useState(0);
const onClick = () => setValue((prev) => prev + 1);
console.log("i run all the time...");
// 한번만 실행
useEffect(() => {
console.log("I run only once.")
}, []);
// count 값이 변경될 때마다 실행
useEffect(() => {
console.log("I run when 'counter' changes.. ", counter);
}, [counter]);
return (
<div>
<h1>{counter}</h1>
<button onClick={onClick}>click me</button>
</div>
);
}
export default App;
여러개의 state를 감지하고 싶으면 배열안에 ,(콤마)로 구분하여 넣어준다.
import { useEffect, useState } from "react";
function App() {
const [counter, setValue] = useState(0);
const [keyword, setKeyword] = useState("");
const onClick = () => setValue((prev) => prev + 1);
const onChange = (event) => setKeyword(event.target.value)
console.log("i run all the time...");
// 한번만 실행. 아무도 watch하지 않는다!!
useEffect(() => {
console.log("I run only once.")
}, []);
// keyword의 변화를 감지하여 실행
useEffect(() => {
if (keyword !== "" && keyword.length > 5) {
console.log("I run when 'keyword' changes.. ", keyword);
}
}, [keyword]);
// counter의 변화를 감지하여 실행
useEffect(() => {
console.log("I run when 'counter' changes.. ", counter);
}, [counter]);
// keyword와 counter의 변화를 감지하여 실행
useEffect(() => {
console.log("I run when 'keyword & counter' changes.. ", counter);
}, [keyword, counter]) ;
return (
<div>
<h1>{counter}</h1>
<button onClick={onClick}>click me</button>
<h1>
<input
value={keyword}
onChange={onChange}
type="text"
placeholder="Search Here.." />
</div>
);
}
export default App;
+
CleanUp
Componenet가 destroy될 때 실행하는 함수이다.
import { useEffect, useState } from "react";
function Hello() {
useEffect(() => {
console.log("Hello");
return () => console.log("Bye");
}, []);
return <h1>Hello</h1>
}
function App() {
const [showing, setShowing] = useState(true);
const onClick = () => setShowing((prev) => !prev);
return (
<div>
{showing ? <Hello/> : null}
<button onClick={onClick}>{showing ? 'Hide' : 'Show'}</button>
</div>
)
}
export default App;
컴포넌트가 마운트 될 때 console.log("Hello"); 코드가 실행되고, 컴포넌트가 언마운트 될 때 console.log("Bye"); 코드가 실행된다.
😎 관련게시글
React 기본 - Component, Props, Event
반응형
'개발 > React' 카테고리의 다른 글
React 상태관리 라이브러리 - Redux vs Recoil (1) | 2023.05.11 |
---|---|
React 기본 - Router (0) | 2023.05.09 |
React 기본 - Component, Props, Event, State (0) | 2023.05.03 |
React App 만들기(2) - Button 컴포넌트 만들기 (0) | 2023.03.08 |
React App 만들기(1) - 프로젝트 생성 (1) | 2023.03.08 |
댓글
반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- 하루견과
- recoil
- useEffect
- 다국어
- 읍천리382
- 타코
- 닭가슴살
- 을지로
- 리액트
- Next.js
- 다이어트
- 스벨트
- TypeScript
- 유지어터
- 타입스크립트
- .env
- svelte
- Redux
- 프로트엔드
- 프로틴
- Componenet
- 간식
- react-i18next
- 산과들에
- 환경변수
- props
- React
- 견과류
- frontend
- 프론트엔드
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
글 보관함