Recoil을 사용하면 state를 다른 컴포넌트에 prop을 통해 계속 내려줄 필요 없이,

atom을 사용해서 여러 컴포넌트에서 쉽게 접근할 수 있다!

 

사용하기 위해선 설치를 먼저 해주어야 한다.

npm i recoil

 

그리고 atoms.ts 파일을 하나 만들어 준 뒤 내부에 아래와 같이 작성했다.

import { atom } from "recoil"; //import recoil

export const isDarkAtom = atom({
  key: "isDark",
  default: false,
});

 

그리고 index.tsx에서 App 컴포넌트를 감싸준다.

import { RecoilRoot } from "recoil"; //import RecoilRoot

root.render(
  <React.StrictMode>
    <RecoilRoot> //recoil
      <QueryClientProvider client={queryClient}>
        <App />
      </QueryClientProvider>
    </RecoilRoot>
  </React.StrictMode>
);

 

다음으로 사용하고자 하는 컴포넌트에는 아래와 같이 작성한다.

function App() {
  const isDark = useRecoilValue(isDarkAtom); //atoms.ts의 isDarkAtom에 연결
  return (
    <>
      <ThemeProvider theme={isDark ? darkTheme : lightThemes}> //atom false=darkTheme, true=lightTheme
        <GlobalStyle />
        <Router />
      </ThemeProvider>
    </>
  );
}

 

또한 토글처럼 값을 계속 변경할 필요가 있을 수도 있는데, 그럴 땐 useSetRecoilState를 사용한다.

  const setDarkAtom = useSetRecoilState(isDarkAtom); //isDarkAtom setState
  const toggleDarkAtom = () => setDarkAtom((prev) => !prev); //prev 토글 구현
  
  /* <button onClick={toggleDarkAtom}>Toggle Mode</button> */

 

'공부 > JavaScript' 카테고리의 다른 글

[React] CORS-Policy 해결하기  (0) 2022.08.05
[React] API Key 숨기기  (0) 2022.08.05
[React] React-Query  (0) 2022.06.02
[TypeScript] interface  (0) 2022.06.01
[TypeScript] DefinitelyTyped  (0) 2022.06.01
복사했습니다!