Reputation: 1
I am new to React and currently taking this tutorial on Youtube. https://www.youtube.com/watch?v=5Bytq6LNDO4&t=599s I am using v4 of React-Router so i have to change a few things.
At my code, the url is changing when I press the buttons at the NavBar, but the content of the different Components won't get rendered :/
Here is my Code:
Store.js
import { compose, createStore, applyMiddleware } from 'redux';
import { createBrowserHistory } from 'history';
import { syncHistoryWithStore } from 'react-router-redux';
import { createLogger } from 'redux-logger';
import rootReducer from './reducers';
const middleware = [
createLogger()
];
const enhancers = compose(
applyMiddleware(...middleware),
window.devToolsExtension ? window.devToolsExtension() : f => f
);
/**
* CREATE STORE
*/
const store = createStore(
rootReducer,
{},
enhancers
);
export const history = syncHistoryWithStore(createBrowserHistory(), store);
export { store };
Routes.js
import React from 'react';
import {Router, Route } from 'react-router';
import { HomeView, Login, SignUp } from './modules';
import { history } from './redux/store';
import App from './App';
export default () => (
<Router history={history}>
<div>
<Route path="/" component={App} />
<Route exact path="/" component={HomeView} />
<Route path="/login" component={Login} />
<Route path="/signup" component={SignUp} />
</div>
</Router>
);
Navbar.js
import React from 'react';
import {Menu} from 'semantic-ui-react';
import { createBrowserHistory } from 'history';
import logo from '../../logo.png';
import './style.css'
const history = createBrowserHistory();
const NavBar = () => (
<Menu>
<Menu.Menu>
<Menu.Item>
My full feature <img src={logo} alt="logo" className="NavBar-logo"/>
</Menu.Item>
</Menu.Menu>
<Menu.Menu position="right">
<Menu.Item onClick={() => history.push('/signup')}>
Sign Up
</Menu.Item>
<Menu.Item onClick={() => history.push('/login')}>
Login
</Menu.Item>
</Menu.Menu>
</Menu>
);
export default NavBar;
App.js
import React, { Component } from 'react';
import {NavBar} from './modules';
import './App.css';
const App = () => (
<div>
<NavBar />
</div>
);
export default App;
Upvotes: 0
Views: 3045
Reputation: 1
So i found a solution: First of all at Routes.js, I have to call the function to create Browser History:
import React from 'react';
import {Router, Route } from 'react-router';
import { HomeView, Login, SignUp } from './modules';
import { createBrowserHistory } from 'history';
import App from './App';
const history = createBrowserHistory();
export default () => (
<Router history={history}>
<div>
<Route path="/" component={App} />
<Route exact path="/" component={HomeView} />
<Route path="/login" component={Login} />
<Route path="/signup" component={SignUp} />
</div>
</Router>
);
And at NavBar.js:
import React from 'react';
import {Menu} from 'semantic-ui-react';
import { createBrowserHistory } from 'history';
import { withRouter } from 'react-router';
import logo from '../../logo.png';
import './style.css'
const history = createBrowserHistory();
const NavBar = withRouter(({history}) => (
<Menu>
<Menu.Menu>
<Menu.Item>
My full feature <img src={logo} alt="logo" className="NavBar-logo"/>
</Menu.Item>
</Menu.Menu>
<Menu.Menu position="right">
<Menu.Item onClick={() => history.push('/signup')}>
Sign Up
</Menu.Item>
<Menu.Item onClick={() => history.push('/login')}>
Login
</Menu.Item>
</Menu.Menu>
</Menu>
));
export default NavBar;
This helped a lot: Programmatically navigate using react router
Upvotes: 0
Reputation: 6491
You're just updating redux routing
reducer when doing:
<Menu.Item onClick={() => history.push('/signup')}>
If you want the UI to actually change you could either connect it to routing.locationBeforeTransition.pathname
redux property
Or
Stick with react-router
like this:
import { Link } from 'react-router';
<Menu.Item>
<Link to="/signup">Sign Up</Link>
</Menu.Item>
Upvotes: 2