React's LifeCycle의 정의와 각 Cycle 단계마다 제어담당
Mount -> Update(=ReRendering) -> UnMount
React's LifeCycle의 제어의 핵심은 useEffect로 다룬다.
useEffect의 정의 :
=> React에서 동작들에 따라 파생되는 효과 중 부작용을 제어하는 훅(Hook)이다.
useEffect 실습하기
1_ useEffect로 카운터 프로젝트에서 count값이 변경될때마다, console창에 count 값을 출력시켜보기
- App.js
import { useState, useEffect } from "react";//useEffect import 추가가
import Controller from "./components/Controller";
import Viewer from "./components/Viewer";
import "./App.css";
function App() {
const [count, setCount] = useState(0);
//useEffect 구현
useEffect(() => {
console.log(count);
}, [count]);
return (
<div className="App">
<h1>Simple Counter</h1>
<section>
<Viewer count={count} />
</section>
<section>
<Controller count={count} onChangeCount={setCount} />
</section>
</div>
);
}
export default App;
개념1_useEffect의 Argument : CallBack Method, [useState 변수들,,]
: State 변수가 변할 때, callBack함수가 작동되도록 하는 useEffect
개념2_ 2번째 Argument인 배열 형태의 State 변수들이 []
를 의존성 배열이라 한다.(더 자세히 알고싶은데, 안얄랴줌)
동작에 의한 State 변수의 값을 console창에 바로 확인하는 방법 => useEffect vs 핸들러에 console.log(state값)
- 핸들러에 console.log(state값) 으로 출력 확인 :
=> 카운트 값은 40인데, 업데이트 직전 값인 30이 console창에 출력된다.
이유 : useState의 setCoun()은 비동기적으로 실행되기 때문
2_ useEffect로 Mount상태의 React , Update 상태의 React , UnMount 상태의 React 구현해보기
● Mount상태의 React : useEffect 의 Argument 중 의존성 배열에 빈배열 => 처음 프로젝트 실행일 때만 콜백 수행
● Update 상태의 React : useEffect 의 Argument 중 의존성 배열 enpty => 업데이트 될때마다 콜백 수행
처음 실행될 때, Mount, Update가 둘다 출력된다는 것을 보이는데, 만약에 Mount 상태가 아닌 순수 Update 상태일 때만 'Update'를 출력시키고 싶다면,
=> useRef() 객체 이용
const isMount = useRef(false); //초기값 false
useEffect(()=>{
if(!isMount.current)//isMount가 false로 왔다면, => Mount 단계의 직전인 상황임
{
//isMount만 true로 돌려놓고, 출력은 X
isMount.current = true;
return;//중요
}
console.log('Mount');//이제 Mount 상태일때만 출력이 된다
},)
● UnMount상태의 React :
★ ★ ★ ★ ★ ★ 알아야 할 구조 :
useEffect(()=>{return ()=>{}},[]);
useEffect 콜백1 안에 return 콜백2 :
- 콜백1 : 매개인자가 업데이트 될 시, 작동된다.
- 콜백2 : 전체 상위 함수인 useEffect가 종료 될 시, 콜백2가 반환되면서, 작동된다.
따라서, Mount의 useEffect가 종료시, return 콜백에 UnMount 구현
useEffecr(()=>{
console.log('Mount');
return ()=>{console.log('UnMount')};
},[])
3_ Even 컴포넌트를 추가하고, Event의 Mount와 UnMount 각 상태 출력 코드 작성
- Even.js
import { useEffect } from "react";
function Even() {
useEffect(() => {
console.log("Even Mount");
return () => {
console.log("Even UnMount");
};
}, []);
return <h3>짝수입니다.</h3>;
}
export default Even;
- App.js
import { useState, useEffect, useRef } from "react";
import Controller from "./components/Controller";
import Viewer from "./components/Viewer";
import "./App.css";
import Even from "./components/Even";
function App() {
const [count, setCount] = useState(0);
const isMount = useRef(false);
//1. Mount_React
useEffect(() => {
//Mount일 떄, isMount.current 값 true로 전환
}, []);
//2. Update_React
useEffect(() => {
if (!isMount.current) {
isMount.current = true;
return;
}
console.log("Update");
});
return (
<div className="App">
<h1>Simple Counter</h1>
<section>
<Viewer count={count} />
{count % 2 === 0 ? <Even /> : null}
</section>
<section>
<Controller count={count} onChangeCount={setCount} />
</section>
</div>
);
}
export default App;
'팀프로젝트_기록일지 > React_이정환_useState,useRef' 카테고리의 다른 글
(8).이정환_react.js강의_App컴포넌트의 items 객체의 배열을 List컴포넌트에 전달하여, 태그형태로 렌더링=>map()렌더링 , 검색기능 (0) | 2025.01.16 |
---|---|
(7).이정환_react.js강의_ List에 입력 후, 추가 , 삭제 구현 초기 셋팅 (0) | 2025.01.16 |
(5).이정환_react.js강의_ 프로젝트_실습1_카운터프로그램 만들기 (0) | 2025.01.15 |
(4).이정환_react.js강의_ React의 Hook의 정의, 규칙, 커스텀 훅 만들기 (0) | 2025.01.14 |
(3).이정환_react.js강의_ 여러 state 변수들을 하나의 객체로 묶기 (0) | 2025.01.14 |