-
[Recoil] 전역 상태 관리가 이렇게 간단해? (feat. Atom, Selector)React.js/라이브러리 2023. 6. 21. 11:44
Atoms
react useState hook을 알고 있다면, Atom의 개념은 어렵지 않다.
recoil을 설치한 후 가장 처음 해야 할 일은, 전역 변수를 사용할 컴포넌트를 <RecoilRoot />로 감싸주어야 한다.
<RecoilRoot> <React.StrictMode> <App /> </React.StrictMode> </RecoilRoot>atom()에 고유한 key를 주고 기본값을 default에 넣어서 할당해 주면 끗! 👍🏻
import { atom } from "recoil"; export const DarkModeAtom = atom({ key: "darkModeAtom", default: true, });이렇게 생성된 전역 변수를 어디에서든 사용할 수 있다.
useRecoilState hook을 통해 useState와 비슷한 형태의 녀석을 가져올 수 있다.
const [isDarkMode, setIsDarkMode] = useRecoilState(DarkModeAtom);이렇게 값만 들고 올 수도 있고,
const isDarkMode = useRecoilValue(DarkModeAtom);setter함수만 들고 올 수도 있다.
const setIsDarkMode = useSetRecoilState(todoListState);상태의 값을 기본값으로 재설정하는 함수를 반환할 수도 있다.
const setIsDarkMode = useResetRecoilState(todoListState);Selectors
Selector는 Atom의 파생된 상태의 일부로, 순수 함수이다.
Atom이 하지 못하는 두 가지 기능을 Selector가 가지고 있다.
- 이미 선언된 Atom이 값이 변경되면, Atom을 구독하고 있던 selector에 할당된 함수가 실행된다.
- 서버와 통신해서 받아온 response data값을 global 상태의 값으로 가질 수 있다.
Selector 사용법은 아래와 같다.
const Selector = selector({ key: '키값', get: ({ get }) => { const 원본 = get(아톰) return 원본변형값 } })예제코드)
export const TotalQuantitySelector = selector({ key: 'todoListStatsState', get: ({get}) => { const CartItem = get(CartItemAtom); return CartItem.length; }, }); export const TotalPriceSelector = selector({ key: 'TotalPriceSelector', get: ({get}) => { const CartItem = get(CartItemAtom); return CartItem.reduce((누적값, 현재값) =>누적값 + 현재값, 0) }, });Atom처럼 key값을 가지고 있는데, 모든 Atom과 Selector를 포함해서 유니크한 값이어야 한다.
get은 함수가 할당되어질 수 있는 프로퍼티다.
구독하고 있는 Atom의 값이 setRecoilState에 의해 수정될 때마다, get에 할당된 함수가 재실행된다.
이는 서버로부터 데이터를 받아오는 로직을 재실행하고 데이터를 가공한후 값을 뱉어낼 수 있음을 뜻한다.

'React.js > 라이브러리' 카테고리의 다른 글
[TinyMCE] 이미지와 텍스트가 섞인 게시글 작성하기 (0) 2023.12.13 [Recoil] 새로고침 후에도 데이터를 유지하려면? (recoil-persist) (0) 2023.11.23 React Query와 서버 상태 관리(비동기 통신 분리) (0) 2023.05.31 [Redux] 개념 잡기 (0) 2023.05.27 [React] Context API 개념 익히기 (0) 2023.05.26