How can I move to using https://cdnjs.cloudflare.com/ajax/libs/react-router/4.0.0-2/react-router.min.js
from using https://cdnjs.cloudflare.com/ajax/libs/react-router/3.0.1/ReactRouter.min.js
?
Example using 3.x below.
HTML
<script src="https://unpkg.com/[email protected]/dist/react.min.js"></script>
<script src="https://unpkg.com/[email protected]/dist/react-dom.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react-router/3.0.1/ReactRouter.min.js"></script>
JS
let { Router, IndexRoute, Redirect, Route, Link, browserHistory } = ReactRouter;
history.replaceState(0,0,'/');
const Main = () =>
<Router history={browserHistory}>
<Route path='/' component={App}>
<IndexRoute component={Home}/>
<Route path='map' component={Map}/>
<Route path='settings' component={Settings}/>
<Redirect from='foo' to='/' />
<Route path='*' component={NotFound}/>
</Route>
</Router>
const App = props =>
<div>
<Navigation>
<Link to='/map'>Map</Link>
<Link to='/settings'>Settings</Link>
<Link to='/foo'>Foo</Link>
</Navigation>
{props.children}
</div>
const Navigation = props => <nav {...props} />
const Home = () => <h1>Home</h1>
const Map = () => <h1>Map</h1>
const Settings = () => <h1>Settings</h1>
const NotFound = (props) => <h1>404 - Not Found</h1>
ReactDOM.render(<Main />, document.body);
See it in action at: https://jsfiddle.net/developit/nvpr63eg/
If I move to any of the CDN hosted 4.x versions though it doesn't work (unreachable code after return statement).
This feature has been deprecated because the new structure of Routes is that they should act like components, so you should take advantage of component lifecycle methods instead.
Use the Navigate element to set a default route with redirect in React Router, e.g. <Route path="/" element={<Navigate to="/dashboard" />} /> . The Navigate element changes the current location when it is rendered. Copied!
The project is deprecated, as noted on the react-router-redux github repo. You can still use it if you want, but you may have some fears using a deprecated library in production.
I was able to configure it with redux by changing a few things:
First, browserHistory
is not defined on react-router
anymore. One way to get it back is to use the package history
.
You will need to install (redux optional):
npm i -S history react-router react-router-redux
Instead of trying to import browserHistory
use:
import { createBrowserHistory } from 'history';
If you want to use redux then import this and add it to your combined reducers:
import { routerReducer as routing } from 'react-router-redux';
combineReducers({
home, about,
routing, // new
});
Next you create the history
object
// redux
import { syncHistoryWithStore } from 'react-router-redux';
const history = syncHistoryWithStore(createBrowserHistory(), store);
// regular
const history = createBrowserHistory();
Then change your router to use the new history
object
<Router history={ history } children={ Routes } />
Everything else should be the same.
If anyone runs into The prop history is marked as required in Router, but its value is undefined.
It is because browserHistory
is no longer available in react-router, see post to use history package instead.
Related
This is a supplement answer to the one Paul S posted above. Credit should still goto paul for posting it.
Reason m supplementing the answer is bcoz:-
yarn steps:
yarn add react-router
yarn add react-router-dom
package.json:
"react": "^15.6.1",
"react-dom": "^15.6.1",
"react-router": "^4.1.1",
"react-router-dom": "^4.1.1"
index.js:
import React from 'react';
import ReactDOM from 'react-dom';
import { Switch, Redirect, Route} from 'react-router';
import {BrowserRouter, Link} from 'react-router-dom';
//let { BrowserRouter, Switch, Redirect, Route, Link } = ReactRouter;
const Main = () =>
<BrowserRouter>
<App>
<Switch>
<Route exact path='/' component={Home}/>
<Route path='/map' component={Map}/>
<Route path='/settings' component={Settings}/>
<Route path='/foo' component={Foo}/>
<Route component={NotFound}/>
</Switch>
</App>
</BrowserRouter>
const App = props =>
<div>
<Navigation>
<Link to='/map'>Map</Link>
<Link to='/settings'>Settings</Link>
<Link to='/foo'>Foo</Link>
</Navigation>
{props.children}
</div>
const Navigation = props => <nav {...props} />
const Home = () => <h1>Home</h1>
const Map = () => <h1>Map</h1>
const Settings = () => <h1>Settings</h1>
const Foo = () => <Redirect to='/' />
const NotFound = (props) => <h1>404 - Not Found</h1>
ReactDOM.render(<Main />, document.body);
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With