Recoil로 React 상태 관리하기
Recoil 설치
1
npm install recoil
App, Counter.jsx 파일 생성
App에 RecoilRoot import
1
2
3
4
5
6
7
8
9
10
// App.jsx
import { RecoilRoot } from "recoil";
export default function App() {
return (
<RecoilRoot>
<Counter />
</RecoilRoot>
);
}
Counter에 atom import
1
2
3
4
5
6
// Counter.jsx
import { atom } from "recoil";
export default function Counter() {
return <div className="counter"></div>;
}
count 상태 아톰 선언
1
2
3
4
5
6
7
8
9
10
11
// Counter.jsx
import { atom } from "recoil";
const countState = atom({
key: "countState",
default: 0,
});
export default function Counter() {
return <div className="counter"></div>;
}
useRecoilState 훅 호출
useRecoilState
import 후 Counter
안에서 useState
훅처럼 사용할 수 있다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
// Counter.jsx
import { atom, useRecoilState } from "recoil";
const countState = atom({
key: "countState",
default: 0,
});
export default function Counter() {
const [count, setCount] = useRecoilState(countState);
return (
<div className="counter">
count: {count}
<br />
<button onclick={() => setCount(count - 1)}>감소</button>
<button onclick={() => setCount(count + 1)}>증가</button>
</div>
);
}
Selector
아톰에서 파생된 상태의 일부
주어진 상태를 수정하는 순수 함수
Selector import, Selector 함수 추가
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
// Counter.jsx
import { atom, selector, useRecoilState } from "recoil";
const countState = atom({
key: "countState",
default: 0,
});
const oddEvenState = selector({
key: "oddEvenState",
get: ({ get }) => {
const count = get(countState);
return count % 2 ? "홀" : "짝";
},
});
export default Counter = () => {
const [count, setCount] = useRecoilState(countState);
return (
<div className="counter">
count: {count} / 홀짝 : {oddEvenState}
<br />
<button onclick={() => setCount(count - 1)}>감소</button>
<button onclick={() => setCount(count + 1)}>증가</button>
</div>
);
};
useRecoilValue import
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
// Counter.jsx
import { atom, selector, useRecoilState, useRecoilValue } from "recoil";
const countState = atom({
key: "countState",
default: 0,
});
const oddEvenState = selector({
key: "oddEvenState",
get: ({ get }) => {
const count = get(countState);
return count % 2 ? "홀" : "짝";
},
});
export default function Counter() {
const [count, setCount] = useRecoilState(countState);
const oddEven = useRecoilValue(oddEvenState);
return (
<div className="counter">
count: {count} / 홀짝 : {oddEven}
<br />
<button onClick={() => setCount(count - 1)}>감소</button>
<button onClick={() => setCount(count + 1)}>증가</button>
</div>
);
}
This post is licensed under CC BY 4.0 by the author.