호환성과 단순함의 측면에서 React 내장 기능은 useState Hook과, Context API를 가급적 이용하는 것이 좋겠지만 다음과 같은 문제점이 있습니다.
Recoil은 이러한 문제를 개선합니다.
Recoil은 타입스크립트를 지원하기 때문에 따로 타입 라이브러리(@type/) 설치가 필요없습니다.
npm install recoil
최상단 컴포넌트에 RecoilRoot 컴포넌트로 감싸주면 됩니다.
import React from 'react';
import ReactDOM from 'react-dom/client';
import './index.css';
import App from './App';
import reportWebVitals from './reportWebVitals';
import { GlobalStyle } from './components/common/Style';
import { QueryClient, QueryClientProvider } from '@tanstack/react-query';
import { RecoilRoot } from 'recoil';
const root = ReactDOM.createRoot(
document.getElementById('root') as HTMLElement
);
const queryCilent = new QueryClient({
defaultOptions : {
queries : {
refetchOnMount : true
}
}
});
root.render(
<React.StrictMode>
<GlobalStyle/>
<RecoilRoot>
<QueryClientProvider client={queryCilent}>
<App />
</QueryClientProvider>
</RecoilRoot>
</React.StrictMode>
);
Redux와는 다르게 Recoil은 프로젝트 내부에 임의의 경로에 atom(작은 단위의 상태)을 설정할 수 있습니다.
저는 store 폴더에 store.ts 파일을 작성하였습니다.
import {atom} from 'recoil';
export const appTestEnrollState= atom<string>({
key : 'appTestEnroll',
default : ''
})