npm i recoil
RecoilRoot
가 필요하다.RecoilRoot
를 넣기에 가장 좋은 장소다.index.ts
import ReactDOM from "react-dom/client";
import { RecoilRoot } from "recoil";
import App from "./App";
const rootEl = document.getElementById("root");
const root = ReactDOM.createRoot(rootEl);
root.render(
<RecoilRoot>
<App />
</RecoilRoot>
);
/atoms.ts
import { atom } from 'recoil';
// count atom
export const countAtom = atom<number>({
key: 'count',
default: 1
});
export const countTextSelector = selector({
key: 'count-text',
get: ({ get }) => {
const value = get(countAtom);
return '현재 카운트는 ' + value + '입니다.';
}
});
// user atom
export interface IUser {
id: number;
name: string;
age?: number;
job?: string;
}
export const userAtom = atom<IUser>({
key: 'user',
default: {
id: 1,
name: '홍길동',
age: 26,
}
});
atom의 값을 읽기 또는 쓰기를 하기 위하여 아래와 같은 Recoil Hook을 사용할 수 있다.
useRecoilState
useRecoilValue
useSetRecoilState
useResetRecoilState
page.tsx
import { useRecoilState, useRecoilValue, useSetRecoilState } from 'recoil';
import { countAtom, countTextSelector } from '@/atoms';
export default () => {
// [number, (value: number) => void | ((currentValue: number) => number) => void]
const [count, setCount] = useRecoilState(countAtom);
// number
const countValue = useRecoilValue(countAtom);
// (value: number) => void | ((currentValue: number) => number) => void
const countSetter = useSetRecoilState(countAtom);
// string
const countText = useRecoilValue(countTextSelector);
return (
<div>
count : {count}
countValue : {countValue}
countText : {countText}
</div>
)
}
count : 0
countValue : 0
countText : 현재 카운트는 0입니다.