diff --git a/packages/next-server/lib/router/router.js b/packages/next-server/lib/router/router.js index cca88738..54d06d01 100644 --- a/packages/next-server/lib/router/router.js +++ b/packages/next-server/lib/router/router.js @@ -1,13 +1,10 @@ /* global __NEXT_DATA__ */ -import React from 'react' import { parse, format } from 'url' import mitt from '../mitt' import shallowEquals from './shallow-equals' import { loadGetInitialProps, getURL } from '../utils' -export const RouterContext = React.createContext() - export default class Router { static events = mitt() diff --git a/packages/next-server/server/render.tsx b/packages/next-server/server/render.tsx index a59827b9..744aa2eb 100644 --- a/packages/next-server/server/render.tsx +++ b/packages/next-server/server/render.tsx @@ -2,7 +2,7 @@ import {IncomingMessage, ServerResponse} from 'http' import { ParsedUrlQuery } from 'querystring' import React from 'react' import { renderToString, renderToStaticMarkup } from 'react-dom/server' -import Router, { RouterContext } from '../lib/router/router' +import Router from '../lib/router/router' import { loadGetInitialProps, isResSent } from '../lib/utils' import Head, { defaultHead } from '../lib/head' import Loadable from '../lib/loadable' @@ -169,13 +169,11 @@ export async function renderToHTML (req: IncomingMessage, res: ServerResponse, p return render(renderElementToString, reactLoadableModules.push(moduleName)}> - - - + ) } diff --git a/packages/next/client/index.js b/packages/next/client/index.js index 20d369cc..2510c004 100644 --- a/packages/next/client/index.js +++ b/packages/next/client/index.js @@ -1,7 +1,7 @@ import React from 'react' import ReactDOM from 'react-dom' import HeadManager from './head-manager' -import { createRouter, makePublicRouterInstance, RouterContext } from 'next/router' +import { createRouter } from 'next/router' import mitt from 'next-server/dist/lib/mitt' import {loadGetInitialProps, getURL} from 'next-server/dist/lib/utils' import PageLoader from './page-loader' @@ -181,11 +181,9 @@ async function doRender ({ App, Component, props, err, emitter: emitterProp = em // In development runtime errors are caught by react-error-overlay. if (process.env.NODE_ENV === 'development') { renderReactElement(( - - - - - + + + ), appContainer) } else { // In production we catch runtime errors using componentDidCatch which will trigger renderError. @@ -198,11 +196,9 @@ async function doRender ({ App, Component, props, err, emitter: emitterProp = em } renderReactElement(( - - - - - + + + ), appContainer) } diff --git a/packages/next/client/router.js b/packages/next/client/router.js index 462a50c4..18c96ceb 100644 --- a/packages/next/client/router.js +++ b/packages/next/client/router.js @@ -75,9 +75,6 @@ export default SingletonRouter // Reexport the withRoute HOC export { default as withRouter } from './with-router' -// Export RouterContext -export { RouterContext } from 'next-server/dist/lib/router/router' - // INTERNAL APIS // ------------- // (do not use following exports inside the app) diff --git a/packages/next/client/with-router.js b/packages/next/client/with-router.js index 93ac8327..91544572 100644 --- a/packages/next/client/with-router.js +++ b/packages/next/client/with-router.js @@ -1,25 +1,25 @@ -import React from 'react' +import React, { Component } from 'react' +import PropTypes from 'prop-types' import hoistStatics from 'hoist-non-react-statics' import { getDisplayName } from 'next-server/dist/lib/utils' -import { RouterContext } from './router' export default function withRouter (ComposedComponent) { const displayName = getDisplayName(ComposedComponent) - function WithRouteWrapper (props) { - return ( - - {router => ( - - )} - - ) - } + class WithRouteWrapper extends Component { + static contextTypes = { + router: PropTypes.object + } - WithRouteWrapper.displayName = `withRouter(${displayName})` + static displayName = `withRouter(${displayName})` + + render () { + return + } + } return hoistStatics(WithRouteWrapper, ComposedComponent) } diff --git a/packages/next/pages/_app.js b/packages/next/pages/_app.js index 5dc6dafb..2ff7a700 100644 --- a/packages/next/pages/_app.js +++ b/packages/next/pages/_app.js @@ -1,12 +1,24 @@ import React, { Component } from 'react' +import PropTypes from 'prop-types' import { execOnce, loadGetInitialProps } from 'next-server/dist/lib/utils' +import { makePublicRouterInstance } from 'next/router' export default class App extends Component { + static childContextTypes = { + router: PropTypes.object + } + static async getInitialProps ({ Component, router, ctx }) { const pageProps = await loadGetInitialProps(Component, ctx) return {pageProps} } + getChildContext () { + return { + router: makePublicRouterInstance(this.props.router) + } + } + // Kept here for backwards compatibility. // When someone ended App they could call `super.componentDidCatch`. This is now deprecated. componentDidCatch (err) {