[ReactJS] 7장 상태관리

img1.daumcdn.png

1. React 상태관리

React에서 상태 관리는 애플리케이션의 데이터 흐름과 UI의 일관성을 유지하는 데 중요한 역할을 합니다. 상태 관리는 사용자 인터페이스의 동적 변화를 가능하게 하고, 애플리케이션의 일관성을 유지하는 데 중요한 역할을 합니다.

 

  • 특징
    • 데이터 흐름: React는 단방향 데이터 흐름을 따르며, 부모 컴포넌트에서 자식 컴포넌트로 props를 통해 데이터를 전달하며, 자식 컴포넌트는 props를 통해 받은 데이터를 기반으로 UI를 렌더링
    • 상태의 불변성: 상태는 직접 수정하지 않고, 항상 새로운 상태 객체를 반환하여 업데이트함, 이는 React의 리렌더링과 최적화에 기여 
    • 훅(Hooks): React 16.8버전부터 도입된 훅을 통해 함수형 컴포넌트에서도 상태 관리를 할 수 있게됨

2. 상태관리의 장점

  • 컴포넌트 기반 구조: React의 컴포넌트 기반 구조 덕분에 상태를 각 컴포넌트에 캡슐화할 수 있어 코드의 재사용성과 유지보수성이 향상
  • 효율적인 리렌더링: 변경된 상태만 리렌더링하여 성능을 최적화
  • 상태 공유 용이: Context API나 상태 관리 라이브러리를 사용하면 여러 컴포넌트 간 상태를 쉽게 공유 
  • 디버깅 용이: 상태 관리 라이브러리(예:Redux)의 경우, 상태의 변화를 추적할 수 있는 도구를 제공하여 디버깅을 쉽게함

3.상태관리 예제

  • 로컬 상태 관리 예제
import React, { useState } from 'react';

const LocalState = () => {
  const [count, setCount] = useState(0);

  const increment = () => {
    setCount(count + 1);
  };

  const decrement = () => {
    // 카운트가 0보다 클 때만 감소
    if (count > 0) {
      setCount(count - 1);
    }
  };

  return (
    <div>
      <h1>Count: {count}</h1>
      <button onClick={increment}>Increment</button>
      <button onClick={decrement}>Decrement</button>
    </div>
  );
};

export default LocalState;
  • Context API를 활용한 전역 상태 관리
// ThemeContext.js
import React, { createContext, useContext, useState } from 'react';

// Context 생성
const ThemeContext = createContext();

// Provider 컴포넌트
export const ThemeProvider = ({ children }) => {
  const [theme, setTheme] = useState('light');

  return (
    <ThemeContext.Provider value={{ theme, setTheme }}>
      {children}
    </ThemeContext.Provider>
  );
};

// Context 사용을 위한 훅
export const useTheme = () => {
  return useContext(ThemeContext);
};
// ThemeComponent.js 
import React from 'react';
import { useTheme } from './ThemeContext';

const ThemedComponent = () => {
  const { theme, setTheme } = useTheme();

  return (
    <div
      style={{
        background: theme === 'light' ? '#fff' : '#333',
        color: theme === 'light' ? '#000' : '#fff',
      }}
    >
      <h1>Current Theme: {theme}</h1>
      <button onClick={() => setTheme(theme === 'light' ? 'dark' : 'light')}>
        Toggle Theme
      </button>
    </div>
  );
};

export default ThemedComponent;
// App.js 
import { ThemeProvider } from './6.State/ThemeContext';
import ThemedComponent from './6.State/ThemeComponent';
import './App.css';
import React from 'react';

const ReactApp = () => {
  return (
    <ThemeProvider>
      <ThemedComponent />
    </ThemeProvider>
  );
};

export default ReactApp;
  • ThemeContext.js: Context를 생성하고, Provider를 통해 상태를 관리, useTheme훅을 만들어서 다른 컴포넌트에서 쉽게 사용할 수 있도록 함
  • ThmedComponent.js: useTheme훅을 사용하여 현재 테마를 가져오고, 버튼 클릭 시 테마를 토글함
  • App.js: ThemeProvider로 애플리케이션을 감싸서 전역 상태를 사용할 수 있음

 

GitHub - Koras02/react-bloging: https://thinky.tistory.com/category/Front-End/ReactJS

https://thinky.tistory.com/category/Front-End/ReactJS - Koras02/react-bloging

github.com

 

LIST

'Front-End > ReactJS' 카테고리의 다른 글

[React] React-Readux 사용법  (0) 2025.03.03
[ReactJS] 8장 Typescript  (0) 2025.02.27
[ReactJS] 6장 폼  (0) 2025.02.25
[ReactJS] 5장 리스트와 키  (0) 2025.02.23
[React] 4강 조건부 렌더링  (0) 2025.02.22