[Recoil] Recoil 사용법 2 - Selector
Recoil의 Selector와 비동기 처리
Selector
import { DefaultValue, selector } from "recoil";
import countState from "../atom/countState";
export default selector({
key: "countSelector",
get: ({ get }): number => {
const count = get(countState);
return count + 1;
},
set: ({ set, get }, newCount) => {
return set(countState, newCount + 10);
},
});
atom에서는 불가능한 비동기 처리와 복잡한 로직을 구현할 수 있다.
key
- selector을 식별하는 데 필요한 고유 문자열
- 프로젝트 전체에서 다른 atom, selector에 대해 고유해야 함.
get
get: ({ get }): number => {
const count = get(countState);
return count + 1;
},
- 파생된 상태를 반환 (read-only)
countState
가 바뀔 때마다 새로운 값 리턴get()
은 여러번 사용 가능, 그 중 하나라도 변하면 리렌더링
set
set: ({ set, get }, newCount) => {
const count = get(countState);
return set(countState, newCount + 10);
},
set()
은 쓰기 가능한 상태 반환set()
의 첫 번째 매개변수는 RecoilState, 두 번째는 새로운 값- set 안에서의
get()
은 구독하지 않고, 단순히 atom이나 selector의 값을 찾는 데 사용
비동기 Selector
export const customState = selector({
key: "customState",
get: async ({ get }) => {
const res = await MyAPI.getAPI(get(myState));
return res.data;
},
});
위 코드처럼 selector 안에서 비동기 통신을 마친 후 값을 사용할 수 있다.