작성
·
81
·
수정됨
0
/*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 공식 문서에서 확인하실 수 있습니다.
더 궁금한 점이 있다면 언제든지 문의주세요!