구버전/React
[전역상태관리] Recoil
고래강이
2023. 11. 2. 21:03
recoil을 사용하기에 앞서 상태관리라이브러리로써 가장 많이 사용되는 Redux와 비교를 안해볼 수 없다.
상태관리 비교
개요
- RecoilRoot
- Atom
- Selector
- Recoil-persist
RecoilRoot
export const App = () => {
return (
<RecoilRoot>
<App />
</RecoilRoot>
)
}
Atom
import {atom} from 'recoil';
export const todoState = atom({
key: "todoState",
default: []
})
장점
- Redux에 비해 적은 boilder plate
- 사용하기 편한 구조
Recoil에서 가장 좋은 점은 학습하기 쉬운 구조로 되어있다는 것이다.
React를 사용하면 기본적으로 사용하게 되는 useState와의 구조가 매우 흡사하기 떄문이다.
- useRecoilState (value와 setter)
- useSetRecoilState (setter)
- useRecoilValue (value)
- useResetRecoilState (reset value)
4가지 방법을 통해서 state를 get하고 set하고 reset하는 방법을 알 수 있다.
Selector
atom을 기반으로 파생된 데이터를 만들어내는데 사용이 된다.
import { selector } from "recoil";
import { todoState } from "../atoms/todoState";
export const todoSortState = selector({
key: "todoSortState",
get: ({ get }) => {
const data = get(todoState);
const result = data.filter((v) => v.state === true)
return result
}
})
Recoil-persist
새로고침을 했을 때 state값이 사라지거나 변경되지 않아야하는 경우 Storage를 이용하는 경우가 있는데 그 떄 사용하는 것임.
import { atom } from "recoil";
import { recoilPersist } from "recoil-persist";
const { persistAtom } = recoilPersist({
key: "sessionStorage", //원하는 key 값 입력
storage: sessionStorage,
})
export const mbtiState = atom({
key: "mbtiState",
default: [],
effects_UNSTABLE: [persistAtom]
})