diff --git a/packages/next/server/render.tsx b/packages/next/server/render.tsx index f201a94c25ac..221adf792a47 100644 --- a/packages/next/server/render.tsx +++ b/packages/next/server/render.tsx @@ -197,20 +197,21 @@ function enhanceComponents( function renderFlight(AppMod: any, ComponentMod: any, props: any) { const isServerComponent = !!ComponentMod.__next_rsc__ - const isServerApp = !!AppMod.__next_rsc__ const App = interopDefault(AppMod) const Component = interopDefault(ComponentMod) const AppServer = isServerComponent ? (App as React.ComponentType) : React.Fragment + const { router: _, ...rest } = props - if (isServerApp) { + if (isServerComponent) { return ( - + ) } + return } @@ -738,7 +739,7 @@ export async function renderToHTML( AppTree: (props: any) => { return ( - {renderFlight(AppMod, ComponentMod, props)} + {renderFlight(AppMod, ComponentMod, { ...props, router })} ) }, diff --git a/test/integration/app-tree/pages/_app.tsx b/test/integration/app-tree/pages/_app.tsx index 0bc5545f0098..78e095ae1a6c 100644 --- a/test/integration/app-tree/pages/_app.tsx +++ b/test/integration/app-tree/pages/_app.tsx @@ -1,9 +1,12 @@ import React from 'react' import Link from 'next/link' +import { createContext } from 'react' import { render } from 'react-dom' import App, { AppContext } from 'next/app' import { renderToString } from 'react-dom/server' +export const DummyContext = createContext(null) + class MyApp

extends App

{ static async getInitialProps({ Component, AppTree, ctx }: AppContext) { let pageProps = {} @@ -32,15 +35,20 @@ class MyApp

extends App

{ const { Component, pageProps, html, router } = this.props const href = router.pathname === '/' ? '/another' : '/' - return html && router.pathname !== '/hello' ? ( - <> -

- - to {href} - - - ) : ( - + const child = + html && router.pathname !== '/hello' ? ( + <> +
+ + to {href} + + + ) : ( + + ) + + return ( + {child} ) } } diff --git a/test/integration/app-tree/pages/index.js b/test/integration/app-tree/pages/index.js index 082531006e0d..380f0c02fe5e 100644 --- a/test/integration/app-tree/pages/index.js +++ b/test/integration/app-tree/pages/index.js @@ -1,7 +1,12 @@ +import { useContext } from 'react' +import { DummyContext } from './_app' import { useRouter } from 'next/router' const Page = () => { const { pathname } = useRouter() + const ctx = useContext(DummyContext) + if (ctx == null) throw new Error('context consumes failed') + return ( <>

page: {pathname}