Skip to content

Instantly share code, notes, and snippets.

@khg0712
Created May 28, 2023 18:18
Show Gist options
  • Save khg0712/bee42f4a13eb822c28057624dc6a3c97 to your computer and use it in GitHub Desktop.
Save khg0712/bee42f4a13eb822c28057624dc6a3c97 to your computer and use it in GitHub Desktop.
// SSR 코드
// packages/next/server/render.tsx
// renderToHTML의 인터페이스는 생략.
// https://github.com/vercel/next.js/blob/v12.3.4/packages/next/server/render.tsx#L351
export async function renderToHTML() {
// CSR과 다르게 SSR에선 ServerRouter라는 별개의 class로 Router를 만든다.
// ServerRouter parameter는 생략.
const router = new ServerRouter()
// ...
// RouterContext.Provider에 SSR용 라우터 주입.
// https://github.com/vercel/next.js/blob/v12.3.4/packages/next/server/render.tsx#L624
const AppContainer = ({ children }: { children: JSX.Element }) => (
<RouterContext.Provider value={router}>
{/* AppContainer 자식 생략 */}
</RouterContext.Provider>
)
// ...
// SSR 결과 반환
return new RenderResult(
chainStreams(streams).pipeThrough(
createBufferedTransformStream(postOptimize)
)
)
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment