// atom.ts
export const mapCategorySelector = selector<any>({
key: 'mapCategorySelector',
get: async ({ get }) => {
const category = get(mapCategoryValue);
const data = await getPopupData();
return data;
},
});
만약 쿼리 해야하는 데이터가 데이터베이스에 저장되어 있었다면, Promise를 리턴하거나 혹은 async 함수를 사용하기만 하면 된다. 의존성에 하나라도 변경점이 생긴다면, selector는 새로운 쿼리를 재평가하고 다시 실행시킨다. 그리고 결과는 쿼리가 유니크한 인풋이 있을 때에만 실행되도록 캐시된다.
Error : Can't perform a React state update on a component that hasn't mounted yet. This indicates that you have a side-effect in your render function that asynchronously later calls tries to update the component. Move this work to useEffect instead.
index.tsx
에서 React.Suspense
컴포넌트를 감싸주고 fallback Props
로 비동기 함수가 끝나기 전 처리를 해주니 에러가 해결되었다.// index.tsx
const root = ReactDOM.createRoot(
document.getElementById('root') as HTMLElement,
);
root.render(
<RecoilRoot>
<React.Suspense fallback={<div>Loading...</div>}>
<QueryClientProvider client={queryClient}>
<App />
</QueryClientProvider>
</React.Suspense>
</RecoilRoot>,
);