728x90
728x90
리액트에서의 상태 관리 방법
- 리액트(React)에서 상태 관리 방법에 대해 알아보자.
- 리액트에서는 상태 관리를 위해 여러 가지 방법을 사용할 수 있으며, 상황에 따라 적절한 방법을 선택하는 것이 중요하다.
상태 관리 방법
1. 지역 상태(Local State)
- 리액트의
useState
훅을 사용하여 컴포넌트 내부에서 상태를 관리할 수 있다. - 작은 규모의 애플리케이션이나 단일 컴포넌트에서 상태 관리가 필요한 경우 적합하다.
import React, { useState } from 'react';
function Counter() {
const [count, setCount] = useState(0);
return (
<div>
<p>You clicked {count} times</p>
<button onClick={() => setCount(count + 1)}>
Click me
</button>
</div>
);
}
2. Context API
- 리액트의 Context API를 사용하면 트리 구조의 깊은 컴포넌트 간에 상태를 공유할 수 있다.
- @createContext@, @useContext@ 등을 사용한다.
- 중간에 많은 컴포넌트들이 있을 때 Prop Drilling을 피할 수 있다.
import React, { createContext, useContext, useState } from 'react';
const CountContext = createContext();
function CounterProvider({ children }) {
const [count, setCount] = useState(0);
return (
<CountContext.Provider value={{ count, setCount }}>
{children}
</CountContext.Provider>
);
}
function Counter() {
const { count, setCount } = useContext(CountContext);
return (
<div>
<p>You clicked {count} times</p>
<button onClick={() => setCount(count + 1)}>
Click me
</button>
</div>
);
}
function App() {
return (
<CounterProvider>
<Counter />
</CounterProvider>
);
}
3. 리덕스(Redux)
- 리덕스는 전역 상태 관리를 위한 라이브러리로, 애플리케이션의 모든 상태를 하나의 중앙 저장소(Store)에서 관리한다.
- 상태가 복잡하고 많은 컴포넌트 간에 공유되어야 할 때 사용하면 좋다.
import { createStore } from 'redux';
import { Provider, useDispatch, useSelector } from 'react-redux';
// Reducer
const counterReducer = (state = { count: 0 }, action) => {
switch (action.type) {
case 'INCREMENT':
return { count: state.count + 1 };
case 'DECREMENT':
return { count: state.count - 1 };
default:
return state;
}
};
// Store
const store = createStore(counterReducer);
// Counter component
function Counter() {
const dispatch = useDispatch();
const count = useSelector((state) => state.count);
return (
<div>
<p>You clicked {count} times</p>
<button onClick={() => dispatch({ type: 'INCREMENT' })}>
Click me
</button>
</div>
);
}
function App() {
return (
<Provider store={store}>
<Counter />
</Provider>
);
}
4. 리코일(Recoil)
- 리코일은 페이스북에서 만든 상태 관리 라이브러리로, 리액트의 상태 관리를 더 간편하게 해준다.
- 전역 상태와 비슷하지만, 더 세밀하게 상태를 관리할 수 있다.
import { atom, selector, useRecoilState, useRecoilValue } from 'recoil';
const countState = atom({
key: 'countState', // 고유값 ID
default: 0, // 기본값(초기값)
});
function Counter() {
const [count, setCount] = useRecoilState(countState);
return (
<div>
<p>You clicked {count} times</p>
<button onClick={() => setCount(count + 1)}>
Click me
</button>
</div>
);
}
function App() {
return (
<RecoilRoot>
<Counter />
</RecoilRoot>
);
}
5. MobX
- MobX는 리액티브 상태 관리를 제공하는 라이브러리로, 상태가 변할 때마다 자동으로 UI가 업데이트된다.
- 코드가 간결하고 직관적이며, 상태 변화에 따른 부수 효과(Side Effect)를 쉽게 관리할 수 있다.
import { makeAutoObservable } from 'mobx';
import { observer } from 'mobx-react';
class CounterStore {
count = 0;
constructor() {
makeAutoObservable(this);
}
increment() {
this.count++;
}
}
const counterStore = new CounterStore();
const Counter = observer(() => (
<div>
<p>You clicked {counterStore.count} times</p>
<button onClick={() => counterStore.increment()}>Click me</button>
</div>
));
function App() {
return <Counter />;
}
728x90
728x90
'Programming > React' 카테고리의 다른 글
[React.js] json() 유틸리티 함수 (React Router) (0) | 2024.07.05 |
---|---|
[React.js] useRouterError 훅 (React Router) (0) | 2024.07.05 |
[React.js] React Router의 loader 속성 (0) | 2024.07.03 |
[React.js] 라우터 설정 방법 (React Router) (0) | 2024.07.02 |
[React.js] <form> 요소에서 제출(Submit) 버튼 사용 시 기본 동작 막는 방법 (0) | 2024.06.28 |
[React.js] memo() 사용할 때 주의할 점 (0) | 2024.06.25 |
[React.js] useEffect와 useCallback (0) | 2024.06.24 |
[React.js] useReducer 훅 (0) | 2024.06.07 |