기록하는 공부
[React/실전형 리액트 Hooks/노마드코더] #2 USEEFFECT 본문
[React/실전형 리액트 Hooks/노마드코더] #2 USEEFFECT
SS_StudySteadily 2023. 4. 1. 21:45
강의출처
useEffect
useEffect는 React Hooks API 중 하나로, 함수형 컴포넌트에서 부작용(side effect)을 처리할 때 사용된다.
부작용이란, 컴포넌트의 상태(state)나 프로퍼티(props) 이외의 외부 요인에 의해 발생하는 작업을 말한다.
예를 들면, API 호출, 타이머 설정, 이벤트 리스너 등이 있다.
useEffect는 컴포넌트가 렌더링 될 때마다 실행된다.
이후, 의존성 배열(deps)에 지정된 값이 변경되면 다시 실행된다.
이때, 첫 번째 인자로 전달된 콜백 함수가 실행되며, 부작용을 처리한다.
부작용을 처리하는 콜백 함수에서는, 주로 상태를 업데이트하거나, 외부 요인에 의해 발생한 작업을 수행한다.
useEffect는 clean-up 함수도 제공한다.
clean-up 함수는, 부작용을 처리하는 콜백 함수가 다음으로 실행되기 전에 호출되며,
부작용을 제거하거나, 리소스를 정리하는 등의 작업을 처리하다.
clean-up 함수는, 두 번째 인자로 전달된 배열에 이전 상태와 비교하여 변화가 있는 값이 있을 경우 실행된다.
예를 들어, useEffect를 사용하여 API 호출을 처리하는 경우,
clean-up 함수에서는 API 요청을 취소하거나, 처리되지 않은 결과를 제거하는 등의 작업을 수행할 수 있다.
이렇게 함으로써, 메모리 누수(memory leak)나 오작동 등을 방지할 수 있다.
useEffect()는 componentDidMount(), componentDidUpdate(), componentWillUnmount() 의 역할을 한다.
간단한 예제 코드
import React, { useState, useEffect } from "react";
import ReactDOM from "react-dom";
const App = () => {
const sayHello = () => console.log("hello");
useEffect(() => {
sayHello();
});
const [number, setNumber] = useState(0);
const [aNumber, setaNumber] = useState(0);
return (
<div className="App">
<div>Hi</div>
<button onClick={() => setNumber(number + 1)}>{number}</button>
<button onClick={() => setaNumber(aNumber + 1)}>{aNumber}</button>
</div>
)
};
const rootElement = document.getElementById("root");
ReactDOM.render(<App />, rootElement);
이 코드는 React Hooks API 중 하나인 useEffect를 사용하는 간단한 예제이다.
처음에 sayHello라는 함수를 정의하고, useEffect에서는 이 함수를 호출한다.
useEffect는 컴포넌트가 렌더링 될 때마다 실행되므로, 여기서는 컴포넌트가 렌더링될 때마다 sayHello 함수가 실행된다.
그다음에는 useState를 사용하여 number와 aNumber라는 두 개의 상태를 관리하고 있다.
number 상태는 버튼을 클릭할 때마다 1씩 증가하며, aNumber 상태는 다른 버튼을 클릭할 때마다 1씩 증가한다.
마지막으로, JSX를 사용하여 화면에 버튼 두 개와 "Hi"라는 텍스트를 출력하고 있다.
첫 번째 버튼은 number 상태를 표시하고, 클릭할 때마다 setNumber 함수를 호출하여 number 상태를 업데이트한다.
두 번째 버튼도 마찬가지로 aNumber 상태를 표시하고,
클릭할 때마다 setaNumber 함수를 호출하여 aNumber 상태를 업데이트한다.
따라서, 이 코드는 컴포넌트가 렌더링 될 때마다 sayHello 함수를 실행하고, 두 개의 버튼을 클릭하면 각각의 상태를 증가시킨다.
다음 포스팅에서 useEffect를 사용한 hooks을 작성해 보도록 하자 !
'Language > Javascript, Typescript, React' 카테고리의 다른 글
[React/실전형 리액트 Hooks/노마드코더] #2.1 useTitle (0) | 2023.04.01 |
---|---|
[React/실전형 리액트 Hooks/노마드코더] #1 USESTATE (useTabs) (0) | 2023.04.01 |
[React/실전형 리액트 Hooks/노마드코더] #1 USESTATE (useInput) (0) | 2023.03.29 |