ํ์ด์ค๋ถ์์ ์ถ์ํ ๋ฆฌ์กํธ๋ฅผ ์ํ ์ ์ญ ์ํ ๊ด๋ฆฌ ๋ผ์ด๋ธ๋ฌ๋ฆฌ
๋ค๋ฅธ ์ ์ญ ์ํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๋นํด ์ค์ , ์ฌ์ฉ์ด ํธ๋ฆฌํ๋ฉฐ ๋ฆฌ์กํธ ๋ฌธ๋ฒ๊ณผ ๋งค์ฐ ์ ์ฌํ๋ค.
npm install recoil
recoil ์ํ๋ฅผ ์ฌ์ฉํ๋ ์ปดํฌ๋ํธ๋ ๋ถ๋ชจ ํธ๋ฆฌ์ ReocilRoot๋ฅผ ํ์์ ์ผ๋ก ์ฌ์ฉํด์ผ ํ๋ค.
๊ณต์ ๋ฌธ์์ ๋ฐ๋ฅด๋ฉด ๋ฃจํธ ์ปดํฌ๋ํธ์ ๋ฃ์ด์ฃผ๋ ๊ฒ์ด ๊ฐ์ฅ ์ข๋ค๊ณ ํ๋ค.
root.render(
<RecoilRoot>
<App />
</RecoilRoot>
);
-Atom์ ์ํ์ ์ผ๋ถ๋ฅผ ๋ํ๋ธ๋ค.
- Atoms๋ ์ด๋ค ์ปดํฌ๋ํธ์์๋ ์ฝ๊ณ ์ธ ์ ์๋ค.
- atom์ ๊ฐ์ ์ฝ๋ ์ปดํฌ๋ํธ๋ ์๋ฌต์ ์ผ๋ก atom์ ๊ตฌ๋ ํ๊ธฐ ๋๋ฌธ์ atom์ ๋ณํ๊ฐ ์์ผ๋ฉด ํด๋น atom์ ๊ตฌ๋ ํ๋ ๋ชจ๋ ์ปดํฌ๋ํธ๊ฐ ์ฌ ๋ ๋๋ง ๋๋ค.
atom()์ ์ฐ๊ธฐ ๊ฐ๋ฅํ state๋ฅผ ๋ํ๋ด๋ atom์ ๋ง๋ ๋ค.
๋๊ฐ์ ์ธ์ ํ์๋ก ํ๋๋ฐ ์ธ์๊ฐ์ ์๋์ ๊ฐ๋ค.
์ฒซ ๋ฒ์งธ ์ธ์ : ์ ์ผํ ์ด๋ฆ์ ํค ๊ฐ
๋ ๋ฒ์งธ ์ธ์ : ๊ธฐ๋ณธ๊ฐ
import { atom } from "recoil"
export const isDarkAtom = atom({
key : "isDark", // ์ ์ฅํ state ์ํ
default : false // state์ ๊ธฐ๋ณธ ๊ฐ
})
์ฃผ์ด์ง reocil ์ํ์ ๊ฐ์ ๋ฆฌํดํ๋ค.
useRecoilValue๋ ์ฝ๊ธฐ ์ ์ฉ ์ํ์ ์ฐ๊ธฐ ๊ฐ๋ฅ ์ํ์์ ๋ชจ๋ ๋์ํ๋ฏ๋ก ์ปดํฌ๋ํธ๊ฐ ์ํ๋ฅผ ์ฝ์ ์๋ง ์๊ฒ ํ๊ณ ์ถ์ ๋์ ์ถ์ฒํ๋ hook์ด๋ค.
import { useRecoilValue } from 'recoil';
const isDark = useRecoilValue(isDarkAtom); // false
์ฐ๊ธฐ ๊ฐ๋ฅํ recoil ์ํ์ ๊ฐ์ ์ ๋ฐ์ดํธ ํ๊ธฐ ์ํ setter ํจ์๋ฅผ ๋ฆฌํดํ๋ค.
useSetRecoilState๋ ์ํ๋ฅผ ์ฝ์ง ์๊ณ ์ฐ๊ธฐ๋ง ํ๊ณ ์ ํ ๋ ์ฌ์ฉํ๋ ๊ฒ์ ์ถ์ฒํ๋ hook์ด๋ค.
const setTheme = useSetRecoilState(isDarkAtom);
// ํ
๋ง ๋ณ๊ฒฝ ํจ์
const handleTheme = () => {
setTheme((prevState) => !prevState);
}
๋
ธ๋ง๋์ฝ๋
recoil ๊ณต์๋ฌธ์
useRecoilValue ๊ณต์๋ฌธ์
useSetRecoilState ๊ณต์๋ฌธ์