packages/react-router/modules/withRouter.js
function withRouter(Component) {
  const displayName = `withRouter(${Component.displayName || Component.name})`;
  const C = props => {
    const { wrappedComponentRef, ...remainingProps } = props;

    return (
      <RouterContext.Consumer>
        {context => {
          invariant(
            context,
            `You should not use <${displayName} /> outside a <Router>`
          );
          return (
            <Component
              {...remainingProps}
              {...context}
              ref={wrappedComponentRef}
            />
          );
        }}
      </RouterContext.Consumer>
    );
  };

  C.displayName = displayName;
  C.WrappedComponent = Component;

  if (__DEV__) {
    C.propTypes = {
      wrappedComponentRef: PropTypes.func
    };
  }

  return hoistStatics(C, Component);
}
function withRouter(Component) {
  const displayName = `withRouter(${Component.displayName || Component.name})`;
  const C = props => {
    const { wrappedComponentRef, ...remainingProps } = props;

    return (
      <RouterContext.Consumer>
        {context => {
          invariant(
            context,
            `You should not use <${displayName} /> outside a <Router>`
          );
          return (
            <Component
              {...remainingProps}
              {...context}
              ref={wrappedComponentRef}
            />
          );
        }}
      </RouterContext.Consumer>
    );
  };

  C.displayName = displayName;
  C.WrappedComponent = Component;

  if (__DEV__) {
    C.propTypes = {
      wrappedComponentRef: PropTypes.func
    };
  }

  return hoistStatics(C, Component);
}
function withRouter ( Component ) { const displayName = ` ${ Component . displayName || Component . name } ` ; const C = props => { const { wrappedComponentRef , ... remainingProps } = props ; return ( < RouterContext . Consumer > { context => { invariant ( context , ` ${ displayName } ` ) ; return ( < Component { ... remainingProps } { ... context } ref = { wrappedComponentRef } / > ) ; } } < / RouterContext . Consumer > ) ; } ; C . displayName = displayName ; C . WrappedComponent = Component ; if ( __DEV__ ) { C . propTypes = { wrappedComponentRef : PropTypes . func } ; } return hoistStatics ( C , Component ) ; }
A public higher-order component to access the imperative API
A public higher - order component to access the imperative API