Gatsby에서 recoil 사용을 위한 설정하기
2달 전
Gatsby에서 Recoil 설정하기
RecoilRoot을 상단에 위치시키기
상태 관리를 위해서는 redux의 Provider처럼 recoil도 RecoilRoot가 필요하다. gatsby는 일반 react의 index.js와 같이 RecoilRoot를 적용할 부분이 보이질 않는다. 검색을 해보니 gatsby-browser.js에 RecoilRoot를 리턴하는 wrapPageElement
함수를 export하면 해결된다고 나온다. 그리고 실행되는 것을 확인했다.
Build시 에러
빌드를 하니 상태 관리를 하려면 RecoilRoot를 상위에 두세요란 에러가 뜬다. 개발 모드일땐 전혀 문제가 없었다. 삽질 좀 하다가 gatsby와 redux의 결합에 관한 공식 예시를 보고 해결책을 찾았다. 해결책은 다음과 같다.
// wrap-with-recoilroot.tsx
import React from 'react';
import { RecoilRoot } from 'recoil';
export default ({ element }) => {
return <RecoilRoot>{element}</RecoilRoot>;
};
// gatsby-browser.js
import wrapWithRecoilRoot from './wrap-with-recoilroot';
export const wrapRootElement = wrapWithRecoilRoot;
// gatsby-ssr.js
import wrapWithRecoilRoot from './wrap-with-recoilroot';
export const wrapRootElement = wrapWithRecoilRoot;