React 상태관리 라이브러리이다.
Redux은 Flux 아키텍처를 사용하는데 dispatcher, action에 많은 보일러 플레이트가 발생한다.
Atoms
더 나아가서 상태를 활용하는 방법이 많이 제공된다.
useRecoilState
= [useRecoilValue, useSetRecoilState]
useResetRecoilState
Selector
A selector represents a piece of derived state
atom의 state를 get
하고 set
하여 다양하게 state를 활용할 수 있다.
캐싱 기능도 있어 받은 데이터에 더 빠른 피드백이 가능해진다.
비동기 처리가 가능하다!! 혁신
export const cookieState = atom({
key: 'cookieState',
default: []
});
export const getCookieSelector = selector({
key: "cookie/get",
get: async ({ get }) => {
try{
const { data } = await client.get('/cookies');
return data.data;
} catch (err) {
throw err;
}
},
set: ({set}, newValue)=> {
set(cookieState, newValue)
}
});
Suspense
<RootRecoil>
<Suspense fallback={<div>Loading...</div>}>
<Cookies />
</Suspense>
</RootRecoil>
Loadable를 활용해도 된다.
import { getCookieSeletor } from '../../reocil';
import { useRecoilState, useRecoilValueLoadable } from 'recoil';
const Cookies = () => {
const cookieLoadable = useRecoilValueLoadable(getCookieSelector);
**switch(cookieLoadable.state){**
case 'hasValue':
return (
<>
(<div>
{**cookieLoadable.contents**.map(cookie =>(
<Card
cookies={cookie}
key={cookie.id}
idx={cookie.id}
/>
))}
</div>)
</>
});
case 'loading':
return <Loading />;
case 'hasError':
throw cookieLoadable.contents;
}
export default Cookies;