4.2 React 렌더링 과정 에서 왜 컴포넌트가 두 번씩 호출될까요?
174
投稿した質問数 2
/*FunctionalComponent.jsx파일*/
import {useEffect,useState} from 'react';
function FunctionalComponent() {
console.log('Function Beginning');
const [value, setValue] = useState(0);
useEffect(() => {
console.log('Function useEffect[]');
return () => {
console.log('Function useEffect return[]');
}
},[]);
useEffect(() => {
console.log('Function useEffect[value]');
return () => {
console.log('Function useEffect return[value]');
}
},[value]);
console.log('Function End');
return (
<div>
<h1>!FunctionalComponent</h1>
<h1>value: {value}</h1>
<button onClick={() => {
setValue((state) => state + 1)
}}
>
Increase value
</button>
</div>
);
}
export default FunctionalComponent

/*App.jsx파일*/
import { useState } from 'react'
import reactLogo from './assets/react.svg'
import viteLogo from '/vite.svg'
import './App.css'
import axios from 'axios';
import FunctionalComponent from './practice/FunctionalComponent'
function App() {
return (
<FunctionalComponent />
)
}
export default App
回答 1
0
안녕하세요, 인프런 AI 인턴입니다.
최상협님, React에서 FunctionalComponent가 두 번씩 호출되는 이유는 주로 개발 환경에서 React의 “Strict Mode”로 인한 것입니다. 이 모드는 일부 사이드 이펙트를 감지하고 방지하기 위해 렌더링을 두 번 실행하여 발생할 수 있는 문제를 진단하는 역할을 합니다. 실제로 사용자에게는 한 번만 렌더링됩니다.
React 18 버전부터는 React.StrictMode가 기본적으로 development 모드에서 활성화되어 있는데, 이 환경에서는 상태 및 라이프사이클 메서드의 불변성을 보장하기 위해 의도적으로 컴포넌트를 두 번씩 렌더링합니다.
실제로 배포될 때는 이러한 방식으로 동작하지 않으니, 예상치 못한 문제가 발생하더라도 우려할 필요는 없습니다. Strict Mode의 본래 목적은 잠재적인 문제를 조기에 발견하여 코드의 안정성을 높이는 것입니다.
만약 두 번 호출되는 것을 피하고자 한다면, <React.StrictMode>를 제거하여 확인할 수 있지만 이는 개발 환경에서만 권장됩니다.
React의 공식 문서에서도 이에 대해 자세히 설명하고 있으니, 부가적인 정보를 원하시면 확인해 보세요. React Strict Mode 공식 문서에서 확인하실 수 있습니다.
더 궁금한 점이 있다면 언제든지 문의주세요!
라우터 궁금사항
0
36
1
자료 Git Source 주소 ??
0
64
1
교육자료 소스 바로 실행시..
0
78
1
교육자료 소스 바로 실행시..
0
58
1
13-1, 13-2 질문
0
121
1
12-2. Recoil -> Jotai 변환 코드 공유합니다.
4
210
1
recoil error 나시는 분들 보세요
3
124
1
어려워요 뭔소리죠 대체
3
313
1
사진이 잘 안보여요.
0
155
1
반복문 사용법은 안알려주고 주의사항만 알려주시는거군요
1
242
0
hooks recoil불러오는 과정에서 src내부에 있는 파일이 안불러와집니다
0
120
1
제발 코드샌드박스 링크 좀 달아주세요....
2
526
2
App.js > QuestionBox > answers ={answers[step]}, QuestionBox.js > answer
0
141
0
useEffect 관련 질문드립니다.
0
136
0
jotai로 변경했을 때 코드
0
428
3
리코일이 업데이트가 안된지 오래됐다고하네요
3
459
1
학습 링크
0
360
1
12-2 질문
0
658
3
5-1 학습링크
0
269
1
7-5. 메모 삭제 기능에 문제가 있습니다.
1
238
0
실습링크
0
323
1
2-6 구구단 배열 넣어서 출력시 질문
0
145
1
[2-1] 강의링크 메모용
3
921
1
[17-3. Redux로 데이터 관리]에서 Store에 슬라이스 리듀서 추가하기 질문합니다.
0
195
1

