# npm
npm install recoil
# yarn
yarn install recoil
Recoil을 사용하기 위한 사전 설정은 Recoil상태관리가 적용될 단위에 <RecoilRoot>
로 래핑하면 됩니다.
function App() {
return (
<RecoilRoot>
<App />
</RecoilRoot>
);
}
import { atom } from "recoil";
export const principalState = atom({ key: "principal", default: "Jane Doe" });
import { principalState } from "./states/atom";
const SampleIndex = ()=>{
const [name, setName] = useRecoilState(principalState);
const onChange = (event) => {
setName(event.target.value);
}
}
useRecoilState
: atom의 값을 구독하고 업데이트할 수 있는 훅입니다.useRecoilValue
: atom값의 구독만 가능한 훅입니다.useSetRecoilState
: atom값을 업데이트만 가능한 훅입니다.atom이나 selector를 기반으로 값을 새롭게 구성해주는 순수함수입니다.
구독중인 atom이나 selector가 업데이트되면 함께 업데이트됩니다.
주로 값을 전처리/후처리하기 위해 사용합니다.
import { atom, selector } from 'recoil';
//
const tempFahrenheit = atom({
key: 'tempFahrenheit',
default: 32,
});
const tempCelcius = selector({
key: 'tempCelcius',
get: ({get}) => ((get(tempFahrenheit) - 32) * 5) / 9,
set: ({set}, newValue) =>
set(
tempFahrenheit,
newValue instanceof DefaultValue ? newValue : (newValue * 9) / 5 + 32,
),
});
get
은 value에 대응됩니다. get을 통해 atom값을 전처리 가능하여 반환가능합니다.get
을 통해 다른 atom을 구독 할 수도 있습니다.set
은 setter에 대응됩니다. set을 통해 atom값을 후처리 가능합니다.페이지를 전환하거나 새로고침하면 데이터가 초기화 될 것입니다. (redux도 똑같은 문제가 있죠)
만약 페이지전환 및 새로고침에도 데이터를 유지하고 싶다면 recoil-persist
를 사용하면됩니다.
# npm
npm install recoil-persist
# yarn
yarn add recoil-persist
import { atom, selector } from "recoil";
import { recoilPersist } from "recoil-persist";
const { persistAtom } = recoilPersist();
export const principalState = atom({
key: "principal",
default: 0,
effects_UNSTABLE: [persistAtom],
});
🚨
effect_UNSTABLE
은 완전한 기능이 아니라는 뜻입니다.
아직 recoil이 나온지 얼마 되지 않았기 때문에 좀 미흡한 부분이 있는데,
작은 프로젝트에선 아직까지 문제가 없는 듯합니다.