Recoil에서 Selector는 파생된 상태 또는 계산된 상태를 나타낸다. 즉 기본적인 atom상태나 다른 selector의 상태를 기반으로 계산되거나 변환된 값을 나타내는데 사용된다.
import { atom, selector } from 'recoil';
// Atom: 기본 상태
const numberListState = atom({
key: 'numberListState',
default: [10, 20, 30, 40],
});
// Selector: 리스트의 합계 계산
const sumState = selector({
key: 'sumState',
get: ({ get }) => {
const numbers = get(numberListState);
return numbers.reduce((acc, num) => acc + num, 0);
},
});
const multipliedByTwoState = selector({
key: 'multipliedByTwoState',
get: ({ get }) => {
const numbers = get(numberListState); // numberListState에 의존
return numbers.map(num => num * 2);
},
});
import { atom, selector } from 'recoil';
const asyncDataState = atom({
key: 'asyncDataState',
default: [],
});
const fetchData = async () => {
const response = await fetch('https://api.example.com/data');
return response.json();
};
const asyncDataSelector = selector({
key: 'asyncDataSelector',
get: async () => {
const data = await fetchData();
return data;
},
});
//multipliedByTwoState는 numberListState에 의존합니다. 따라서 numberListState의 값이 변경되면 multipliedByTwoState의 값도 자동으로 다시 계산됩니다.