Using react-router I\'m looking for a way to update the page URL / hash, without the router re-rendering the whole page.
I am developing a full page carousel, and wo
For React router v4 you need to use history
and pass it as prop to the Router
. Router
will then pass history
object to your component as a prop and you can use it like so:
// In your component
this.props.history.push("#testing")
History file
// history.js
import createHistory from "history/createBrowserHistory";
export default createHistory();
Then, wherever you are declaring your router, pass the history prop
import history from "./history";
import { Router } from "react-router-dom";
<Router history={history}>
// ... Your component
</Router>
react-router no longer sets a key on your routes. If you do need to set a key from a route handler, put it on a surrounding element.
return (
<div key={this.props.params.bookId}>
{this.props.children}
</div>
);
It's now <ReactRouter.RouteHandler key="anything" />
, but this is also no longer really needed due to changes in react-router. See the changelog for more details.
Currently, react-router sets a key on your handler based on the current route. When react does its diff, and notices a different key, it throws out the entire subtree both in virtual and real dom, and rerenders.
To prevent this, you can override react-router's key when using activeRouteHandler()
this.props.activeRouteHandler({key: "anything"})
It is a pain to work with react-router because it involves breaking changes in every major and minor release
React Router v2.0 rc5
import { hashHistory } from 'react-router'
this.props.location.query.t = key;
hashHistory.replace(this.props.location);