이번에는 useEffect 를 이용해 특정 조건에 따른 결과값 출력을 해보겠습니다~
useEffect는 React Hook으로, 함수 컴포넌트에서 부수 효과(side effects)를 수행할 수 있도록 해줍니다. 부수 효과란 컴포넌트 내에서 상태를 변경하거나 외부 데이터를 가져오는 등의 작업을 말합니다.
useEffect는 다음과 같은 시나리오에서 유용하게 사용됩니다:
- 렌더링 이후 작업 실행: 컴포넌트가 렌더링된 후 특정 작업을 수행해야 하는 경우에 사용됩니다. 예를 들어, 데이터를 가져오거나 DOM 요소에 접근하는 등의 작업이 이에 해당합니다.
- 의존성 변경 감지: 특정 상태나 프로퍼티의 값이 변경될 때마다 작업을 수행해야 하는 경우에 사용됩니다. useEffect의 두 번째 매개변수로 의존성 배열(dependency array)을 전달하여 이를 구현할 수 있습니다.
- 컴포넌트 언마운트 시 정리 작업: 컴포넌트가 언마운트되거나 업데이트되기 전에 정리(clean-up) 작업이 필요한 경우에 사용됩니다. 이를 통해 메모리 누수(memory leak)를 방지할 수 있습니다.
useEffect(() => {
// 부수 효과 작업
return () => {
// 정리 작업 (선택사항)
};
}, [의존성 배열]);
위 코드에서 useEffect는 함수를 매개변수로 받으며, 해당 함수는 부수 효과 작업을 수행합니다. 두 번째 매개변수는 의존성 배열이며, 이 배열에 포함된 값들 중 하나라도 변경될 때마다 useEffect의 함수가 다시 실행됩니다. 부수 효과 함수가 반환하는 함수는 정리 작업을 수행하며, 컴포넌트가 언마운트되거나 업데이트되기 전에 호출됩니다.
이번 예제의 요구사항 입니다
* 요구사항 – [일 열심히 함] 버튼을 계속 누르면 직급과 연봉 그리고 색상이 변경되도록 한다.
import React from "react";
import { useEffect, useState } from "react";
function App() {
useEffect(() => {});
return (
<div className="App" style={{ backgroundColor: "red" }}>
<button></button>
</div>
);
}
export default App;
일단 이렇게 초기화면 코드를 적어준다
npm start로 시작해보고 오류가 없다면 계속 ㄱㄱㄱㄱㄱ
import React from "react";
import { useEffect, useState } from "react";
function App() {
const { point, setPoint } = useState(0);
const btnWork = () => {};
useEffect(() => {});
return (
<div className="App" style={{ backgroundColor: "red" }}>
<button onClick={btnWork}>일 열심히 함 </button>
<h1>
당신의 직급은 신입사원 입니다 <br></br>
연봉은 5000만원 입니다.
</h1>
</div>
);
}
export default App;
실행화면
css를 먹여주자
편안.
이어서 useEffect는 특정 값이 변경 될 때만 변경되는 기능으로 드디어 한번 써보겠슴다.
import React from "react";
import { useEffect, useState } from "react";
import "./App.css";
function App() {
const [point, setPoint] = useState(0);
const [grade, setGrade] = useState("신입사원");
const [salary, setSalary] = useState(5000);
const [color, setColor] = useState("red");
const btnWork = () => {
setPoint(point + 200);
console.log("일 잘하고 있음? 진급함 ㅋㅋ?");
console.log("point", point);
if (point > 1000) {
setGrade("대리");
setSalary(7000);
setColor("blue");
}
if (point > 2000) {
setGrade("과장");
setSalary(10000);
setColor("green");
}
if (point > 3000) {
setGrade("부장");
setSalary(15000);
setColor("yellow");
}
};
useEffect(() => {
console.log("축하드립니다~!");
if (grade === "과장") {
console.log("과장으로 진급하셨습니다.");
setColor("green");
}
if (grade === "부장") {
console.log("부장으로 진급하셨습니다.");
setColor("yellow");
}
}, [grade]);
return (
<div className="App" style={{ backgroundColor: `${color}` }}>
<button onClick={btnWork}>일 열심히 함 </button>
<h1>
당신의 직급은 {grade} 입니다 <br></br>
연봉은 {salary} 입니다.
</h1>
</div>
);
}
export default App;
조금 길다 .
- useState 훅을 사용하여 상태 변수를 정의합니다. point, grade, salary, color 상태 변수를 정의하고 초기값을 설정합니다.
- btnWork 함수는 버튼 클릭 시 호출됩니다. 이 함수는 point 상태를 200씩 증가시키고, 그에 따라 조건에 따라 grade, salary, color를 업데이트합니다.
- useEffect 훅은 컴포넌트가 렌더링될 때마다 실행되며, grade 상태가 변경될 때마다도 실행됩니다. grade에 따라 콘솔에 메시지를 출력하고, color를 업데이트합니다.
- JSX 내에서는 버튼 클릭 시 btnWork 함수가 호출되도록 이벤트 리스너를 등록하고, 현재 직급과 연봉을 보여주는 UI를 렌더링합니다.
실행화면을 확인해보자
정상적으로 잘 동작한다 !
콘솔에서 같은 값이 같이 출력되는경우
index.js에 있는 <React.StrictMode></React.StrictMode>를 제거하면 한 번만 출력됨다
useEffect를 이용한 예제를 풀어보았습니다
봐주셔서 감사합니다~
'국비교육 > React' 카테고리의 다른 글
React - 감정일기장 만들기 #02 (0) | 2024.03.24 |
---|---|
React - 감정 일기장 만들기 #01 (1) | 2024.03.22 |
React 예제풀이 #03 useRef (0) | 2024.03.14 |
React 예제풀이 # 01 - 카운터를 통하여 알아보는 자바스크립트와 리액트의 차이점,장단점 (0) | 2024.03.11 |
#React 리액트(React)를 왜 사용해야 할까? (0) | 2024.03.11 |