npm install recoil
yarn add recoil
<RecoilRoot> // Recoil Root 적용!
<React.Suspense fallback={<div>Loading... </div>}>
<App />
</React.Suspense>
</RecoilRoot>
// /src/recoil/index.ts
import { atom } from 'recoil';
export const FirstState = atom<string|null>({
key: 'first',
default: null,
})
export const SecondState = atom<string[]>({
key: 'second',
default: [],
})
import { useRecoilState,useRecoilValue ,
useSetRecoilState, useResetRecoilState } from 'recoil';
function TestComponent () {
// FirstState atoms 의 getter,setter 생성, useState 유사
const [first , setFirst] = useRecoilState(FirstState)
// 값만 반환.
const firstValue= useRecoilValue(FirstState)
// 값을 변경하는 함수만 반환.
const setSecondState= useSetRecoilState(SecondState)
// 리셋.
const resetSecond = useResetRecoilState(SecondState)
// 사용
return (
<div>
<span>{first} useRecoilState 사용</span>
<span>{firstValue} useRecoilValue 사용</span>
<button onClick={()=>{setFirst('얌')}}> 얌으로 변경 </button>
<button onClick={()=>{setSecondState('냠')}}> 냠으로 변경 </button>
<button onClick={resetSecond}> 리셋 세컨드 사용 </button>
</div>
)
}
atom 또는 다른 Selector로 이루어진 순수함수.
import {atom ,selector} from 'recoil'
const A = atom({
key: 'A',
default: 19
})![]
const B = selector<Number>({
key: 'B',
get: ({get}) => {
const newB = get(A) - 9 ;
return newB
},
set: ({set} , new) =>
const newB = Number(new) - 10
set(A ,newB)
})