diff --git a/docs/Troubleshooting.md b/docs/Troubleshooting.md index 70dd01adf8..6d579f7428 100644 --- a/docs/Troubleshooting.md +++ b/docs/Troubleshooting.md @@ -6,7 +6,7 @@ You need to add `router` to your component's `contextTypes` to make the router o ```js contextTypes: { - router: React.PropTypes.object.isRequired + router: Router.PropTypes.router } ``` diff --git a/docs/guides/ConfirmingNavigation.md b/docs/guides/ConfirmingNavigation.md index 5ea968fd1b..af087f1cab 100644 --- a/docs/guides/ConfirmingNavigation.md +++ b/docs/guides/ConfirmingNavigation.md @@ -6,7 +6,7 @@ You can prevent a transition from happening or prompt the user before leaving a const Home = React.createClass({ contextTypes: { - router: React.PropTypes.object + router: Router.PropTypes.router }, componentDidMount() { diff --git a/modules/PropTypes.js b/modules/PropTypes.js index c22a9726b7..e3a6c6b169 100644 --- a/modules/PropTypes.js +++ b/modules/PropTypes.js @@ -9,9 +9,11 @@ export function falsy(props, propName, componentName) { export const history = shape({ listen: func.isRequired, - pushState: func.isRequired, - replaceState: func.isRequired, - go: func.isRequired + push: func.isRequired, + replace: func.isRequired, + go: func.isRequired, + goBack: func.isRequired, + goForward: func.isRequired }) export const location = shape({ @@ -27,11 +29,18 @@ export const components = oneOfType([ component, object ]) export const route = oneOfType([ object, element ]) export const routes = oneOfType([ route, arrayOf(route) ]) +export const router = shape({ + push: func.isRequired, + replace: func.isRequired, + go: func.isRequired, + goBack: func.isRequired, + goForward: func.isRequired, + setRouteLeaveHook: func.isRequired, + isActive: func.isRequired +}) + export default { - falsy, history, location, - component, - components, - route + router } diff --git a/modules/__tests__/RouterContext-test.js b/modules/__tests__/RouterContext-test.js index a394322ab5..55010ed532 100644 --- a/modules/__tests__/RouterContext-test.js +++ b/modules/__tests__/RouterContext-test.js @@ -3,6 +3,7 @@ import React from 'react' import { render, unmountComponentAtNode } from 'react-dom' import match from '../match' +import { router as routerPropType } from '../PropTypes' import RouterContext from '../RouterContext' import { createRouterObject } from '../RouterUtils' @@ -41,7 +42,7 @@ describe('RouterContext', () => { } Component.contextTypes = { - router: React.PropTypes.object.isRequired + router: routerPropType.isRequired } routes = { path: '/', component: Component } diff --git a/modules/__tests__/transitionHooks-test.js b/modules/__tests__/transitionHooks-test.js index f6986da11d..0fa02755cf 100644 --- a/modules/__tests__/transitionHooks-test.js +++ b/modules/__tests__/transitionHooks-test.js @@ -2,6 +2,7 @@ import expect, { spyOn } from 'expect' import React, { Component } from 'react' import { render, unmountComponentAtNode } from 'react-dom' import createHistory from '../createMemoryHistory' +import { router as routerPropType } from '../PropTypes' import execSteps from './execSteps' import Router from '../Router' @@ -42,7 +43,7 @@ describe('When a router enters a branch', function () { } NewsFeed.contextTypes = { - router: React.PropTypes.object.isRequired + router: routerPropType.isRequired } class Inbox extends Component { @@ -71,7 +72,7 @@ describe('When a router enters a branch', function () { } User.contextTypes = { - router: React.PropTypes.object.isRequired + router: routerPropType.isRequired } NewsFeedRoute = { diff --git a/upgrade-guides/v2.0.0.md b/upgrade-guides/v2.0.0.md index b93bc7193e..4f509d086c 100644 --- a/upgrade-guides/v2.0.0.md +++ b/upgrade-guides/v2.0.0.md @@ -112,7 +112,7 @@ Access `location` from `this.props.location` of your `Route` component. If you'd // v2.0.x const RouteComponent = React.createClass({ childContextTypes: { - location: React.PropTypes.object + location: Router.PropTypes.location }, getChildContext() { @@ -136,7 +136,7 @@ const RouteComponent = React.createClass({ // 2.0.0 const RouteComponent = React.createClass({ contextTypes: { - route: React.PropTypes.object + route: Router.PropTypes.route }, getChildContext() { return { @@ -160,7 +160,7 @@ const RouteComponent = React.createClass({ // v2.0.0 const RouteComponent = React.createClass({ contextTypes: { - router: React.PropTypes.object.isRequired + router: Router.PropTypes.router.isRequired }, componentDidMount() { const { route } = this.props @@ -204,7 +204,7 @@ const RouteComponent = React.createClass({ // v2.0.0 const RouteComponent = React.createClass({ contextTypes: { - router: React.PropTypes.object.isRequired + router: Router.PropTypes.router.isRequired }, someHandler() { this.context.router.push(...) @@ -229,7 +229,7 @@ const DeepComponent = React.createClass({ // 1) Use context.router (especially if on the server) const DeepComponent = React.createClass({ contextTypes: { - router: React.PropTypes.object.isRequired + router: Router.PropTypes.router.isRequired }, handleSubmit() { this.context.router.push(...)