React/React에서 Recoil로 상태관리하기
Recoil을 사용한 React 상태 관리(3): RecoilRoot와 컴포넌트에서 상태 사용하기
atomicdev
2024. 10. 14. 15:30
728x90
RecoilRoot와 컴포넌트에서 상태 사용하기
1. RecoilRoot로 애플리케이션에 Recoil 상태 적용하기
RecoilRoot는 Recoil 상태 관리의 최상위 컴포넌트로, 애플리케이션 내에서 Recoil 상태를 사용할 수 있도록 환경을 제공합니다. 모든 Recoil 관련 상태(Atom, Selector)는 RecoilRoot로 감싸진 컴포넌트 내에서만 동작합니다.
RecoilRoot 적용 방법
애플리케이션의 최상단에서 RecoilRoot로 컴포넌트를 감싸서 Recoil 상태를 사용하도록 설정할 수 있습니다.
// src/index.js
import React from 'react';
import ReactDOM from 'react-dom';
import { RecoilRoot } from 'recoil';
import App from './App';
ReactDOM.render(
<RecoilRoot>
<App />
</RecoilRoot>,
document.getElementById('root')
);
2. 컴포넌트에서 useRecoilState, useRecoilValue 훅 사용법
useRecoilState
useRecoilState 훅은 상태를 읽고 업데이트하는 기능을 제공합니다. React의 useState와 비슷하지만, Recoil 상태를 전역적으로 관리할 수 있습니다.
import React from 'react';
import { useRecoilState } from 'recoil';
import { counterState } from './atoms'; // Atom 정의
function Counter() {
const [count, setCount] = useRecoilState(counterState);
return (
<div>
<h1>Count: {count}</h1>
<button onClick={() => setCount(count + 1)}>Increment</button>
<button onClick={() => setCount(count - 1)}>Decrement</button>
</div>
);
}
export default Counter;
- useRecoilState(counterState)는 counterState라는 Atom의 값을 읽고, 해당 값을 업데이트할 수 있는 함수를 반환합니다.
useRecoilValue
useRecoilValue 훅은 상태를 읽기 전용으로 사용할 때 유용합니다. 상태를 읽을 수는 있지만, 값을 직접 업데이트할 필요는 없을 때 사용됩니다.
import React from 'react';
import { useRecoilValue } from 'recoil';
import { counterState } from './atoms'; // Atom 정의
function DisplayCounter() {
const count = useRecoilValue(counterState);
return <h1>Current Count: {count}</h1>;
}
export default DisplayCounter;
- useRecoilValue(counterState)는 counterState의 상태 값을 읽을 수 있지만, 상태를 업데이트하지는 않습니다.
3. 실습: useRecoilState와 useRecoilValue 사용
useRecoilState로 상태 업데이트 및 읽기
- Atom 정의: 먼저 상태를 저장할 Atom을 정의합니다.
// src/atoms.js import { atom } from 'recoil'; export const counterState = atom({ key: 'counterState', // 고유한 키값 default: 0, // 초기 값 });
- useRecoilState 사용: 컴포넌트에서 useRecoilState를 사용하여 상태를 읽고, 업데이트할 수 있습니다.
// src/Counter.js import React from 'react'; import { useRecoilState } from 'recoil'; import { counterState } from './atoms'; function Counter() { const [count, setCount] = useRecoilState(counterState); return ( <div> <h1>Count: {count}</h1> <button onClick={() => setCount(count + 1)}>Increment</button> <button onClick={() => setCount(count - 1)}>Decrement</button> </div> ); } export default Counter;
useRecoilValue로 상태 읽기
- useRecoilValue 사용: 상태 값을 읽기만 할 때는 useRecoilValue를 사용합니다.
// src/DisplayCounter.js import React from 'react'; import { useRecoilValue } from 'recoil'; import { counterState } from './atoms'; function DisplayCounter() { const count = useRecoilValue(counterState); return <h1>Current Count: {count}</h1>; } export default DisplayCounter;
4. 요약
- RecoilRoot는 Recoil 상태를 사용하는 애플리케이션의 최상위 컴포넌트입니다.
- useRecoilState 훅을 사용하여 상태를 읽고, 업데이트할 수 있습니다.
- useRecoilValue 훅을 사용하여 상태를 읽기 전용으로 사용할 수 있습니다.
- 실습을 통해 useRecoilState로 상태를 업데이트하고, useRecoilValue로 상태를 읽는 방법을 익혔습니다.
728x90