현재 사용중인 Context

내부에 소켓 이벤트들이 있어서 그렇지 상태만 뽑아놓으니 생각보다 간단해요.

<**UserContext**.Provider value={{ user, setUser }}>
  <Routes>
    <Route path="/" element={<LoginPage />} />
    <Route path="/oauth" element={<OAuthPage />} />
    <Route path="/workspace/*" element={<WorkspacePage />} />
    <Route path="/404" element={<NotFoundPage />} />
  </Routes>
</UserContext.Provider>
<Suspense fallback={<WorkspaceSkeleton />}>
  <**WorkspacesContext**.Provider value={{ workspaces, setWorkspaces }}>
    {isLoaded ? (
      <Routes>
        <Route path="/" element={<Layout />}>
          <Route index element={<DefaultWorkspace />} />
          <Route path="/:id/*" element={<Workspace />} />
        </Route>
      </Routes>
    ) : (
      <WorkspaceSkeleton />
    )}
  </WorkspacesContext.Provider>
</Suspense>
<**SocketContext**.Provider value={memoizedSocketValue}>
  <**MeetingContext**.Provider value={memoizedOnGoingValue}>
    {**workspace** && ( // 현재 Recoil atom, 기존 코드에서는 Context 사용
      <**SelectedMomContext**.Provider value={{ selectedMom, setSelectedMom }}>
        <Sidebar />
        {workspace.moms.length ? <Mom /> : <DefaultMom />}
      </SelectedMomContext.Provider>
    )}
    {isOnGoing && <MeetingMediaBar />}
  </MeetingContext.Provider>
</SocketContext.Provider>