React/React Core
6.React 함수형 컴포넌트 완전 정복: 간단하고 효율적인 UI 구성
코딩쉐프
2024. 11. 22. 16:11
728x90
"React 함수형 컴포넌트 완전 정복: 간단하고 효율적인 UI 구성"
1시간 분량 강의안 (Functional Components 기초)
강의 목표
- 함수형 컴포넌트의 개념과 특징을 이해한다.
- 함수형 컴포넌트를 사용하여 React 애플리케이션을 작성하는 방법을 학습한다.
- useState와 useEffect를 활용해 동적인 UI를 구현한다.
강의 목차
1. React 함수형 컴포넌트란? (10분)
함수형 컴포넌트의 정의
- 함수형 컴포넌트는 JavaScript 함수로 정의되는 React 컴포넌트입니다.
- 클래스형 컴포넌트와 달리 React의 Component를 상속받지 않으며, 단순한 함수로 동작합니다.
함수형 컴포넌트의 특징
- 간결함: 구조가 간단하며, 코드 작성이 쉬움.
- 무상태 (Stateless): 초기에는 상태를 관리하지 않았으나, React Hooks 도입 이후 상태와 생명주기를 관리할 수 있게 됨.
- 성능 최적화: 클래스형 컴포넌트보다 메모리 사용량이 적고 렌더링 속도가 빠름.
함수형 컴포넌트와 클래스형 컴포넌트 비교
특징함수형 컴포넌트클래스형 컴포넌트
작성 방식 | JavaScript 함수 | React.Component를 상속받는 클래스 |
상태 관리 | useState Hook 사용 | this.state 사용 |
라이프사이클 관리 | useEffect Hook 사용 | 라이프사이클 메서드 사용 |
코드 가독성 | 간결하고 직관적 | 상대적으로 복잡 |
2. 함수형 컴포넌트 작성하기 (20분)
1단계: 기본 함수형 컴포넌트 작성
- React 함수형 컴포넌트는 단순한 함수를 반환합니다.
// src/components/greeting.js function Greeting() { return <h1>Hello, React!</h1>; } export default Greeting;
- Greeting 컴포넌트를 App 컴포넌트에서 사용:
// src/App.js
import React from 'react';
import Greeting from './greeting';
function App() {
return (
<div>
<Greeting />
</div>
);
}
export default App;
2단계: Props 사용하기
- Props는 부모 컴포넌트에서 자식 컴포넌트로 데이터를 전달합니다.
- 결과: Hello, React!
-
function Greeting(props) { return <h1>Hello, {props.name}!</h1>; } function App() { return <Greeting name="React" />; } export default App;
3단계: State 사용하기 (React Hooks)
- useState Hook을 사용해 상태를 관리합니다.
- 버튼 클릭 시 count 값이 증가합니다.
-
// src/components/counter.js import React, { useState } from 'react'; function Counter() { const [count, setCount] = useState(0); return ( <div> <p>현재 카운트: {count}</p> <button onClick={() => setCount(count + 1)}>증가</button> </div> ); } export default Counter;
3. 함수형 컴포넌트에서 생명주기 관리 (15분)
useEffect Hook 사용
- 컴포넌트가 마운트될 때 실행:
// src/App.js import React, { useEffect } from 'react'; function App() { useEffect(() => { console.log("컴포넌트가 마운트되었습니다."); }, []); return <h1>Hello, React!</h1>; } export default App;
- State 변경 시 실행:
// src/components/counter.js import React, { useState, useEffect } from 'react'; function Counter() { const [count, setCount] = useState(0); useEffect(() => { console.log(`카운트가 ${count}로 변경되었습니다.`); }, [count]); return ( <div> <p>현재 카운트: {count}</p> <button onClick={() => setCount(count + 1)}>증가</button> </div> ); } export default Counter;
3. 컴포넌트가 언마운트될 때 실행:
useEffect(() => {
const interval = setInterval(() => {
console.log("타이머 동작 중");
}, 1000);
return () => {
clearInterval(interval);
console.log("컴포넌트가 언마운트되었습니다.");
};
}, []);
4. 실습 과제 (10분)
실습 과제
- 사용자 입력을 받아 "안녕하세요, [사용자 이름]" 메시지를 표시하는 함수형 컴포넌트를 작성하세요.
- 버튼 클릭 시 카운트를 증가시키고, 10 이상이 되면 "최대 카운트 도달" 메시지를 표시하세요.
예제
- 실습 1번의 예제:
// src/components/greeting.js
import React, { useState } from 'react';
function Greeting() {
const [name, setName] = useState('');
return (
<div>
<input
type="text"
placeholder="이름을 입력하세요"
value={name}
onChange={(e) => setName(e.target.value)}
/>
<h1>안녕하세요, {name}!</h1>
</div>
);
}
export default Greeting;
실습과제 2번 완성 모습
5. Q&A 및 정리 (10분)
- Q&A:
- 함수형 컴포넌트와 클래스형 컴포넌트 중 어떤 것을 사용해야 할까요?
- useEffect의 의존성 배열은 어떻게 작동하나요?
- 요약:
- 함수형 컴포넌트는 React에서 가장 권장되는 방식입니다.
- useState와 useEffect를 사용해 상태와 생명주기를 관리할 수 있습니다.
- 간결한 구조로 컴포넌트를 작성하여 생산성을 높일 수 있습니다.
728x90