I have 'Nav' component in 'app.js' ( parent component ) and 'home.js' conditionally to have white space responsively on the bottom of the header only in Homepage by setting header { height: 90vh }.
In order to do that, I included < Nav > in header tag in 'Home.js'.
And Here the problem came up, Nav Link works well in app.js, but it's not even clickable in home.js.
index.js
import React from 'react';
import { render } from 'react-dom';
import { Provider } from 'react-redux';
import { ConnectedRouter as Router } from 'react-router-redux';
import createHistory from 'history/createBrowserHistory';
import Store from './Store';
import Routes from './Routes';
require('./styles/main.scss');
const root = document.createElement('div');
document.body.appendChild(root);
render(
<Provider store={Store}>
<Router history={createHistory()}>
<Routes />
</Router>
</Provider>,
root,
);
Routes.js
import React from 'react';
import { Switch, Route } from 'react-router-dom';
import { hot } from 'react-hot-loader';
import App from './src/app';
/* --- Components --- */
import Loader from './src/shared/loader';
const Home = Loader({
loader: () => import('./src/components/Home' /* webpackChunkName: 'Home' */),
});
const Login = Loader({
loader: () => import('./src/components/login' /* webpackChunkName: 'Login' */),
});
const NoMatch = Loader({
loader: () => import('./src/shared/NoMatch' /* webpackChunkName: 'NoMatch' */),
});
const routes = () => (
<div>
<App />
<Switch>
<Route exact path="/" component={Home} />
<Route path="/login" component={Login} />
<Route component={NoMatch} />
</Switch>
</div>
);
const Routes =
!module.hot || process.env.NODE_ENV === 'production'
? routes
: hot(module)(routes);
export default Routes;
App.js
import React from 'react';
import { Helmet } from 'react-helmet';
/* --- shared --- */
import Loader from './shared/loader';
const Nav = Loader({
loader: () => import('./shared/nav' /* webpackChunkName: 'Nav' */),
});
const App = props => {
const isHomepage = window.location.pathname === '/';
return (
<div id="app">
<Helmet>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<title>###</title>
<meta property="og:title" content="###" />
<meta property="og:description" content="###" />
<meta property="og:type" content="###" />
<meta property="og:url" content="###" />
<meta property="og:image" content="###" />
<link type="text/plain" rel="author" href="http://domain/humans.txt" />
<link type="text/plain" rel="author" href="http://domain/robots.txt" />
<link
href="https://fonts.googleapis.com/css?family=Nanum+Gothic"
rel="stylesheet"
/>
<link
rel="stylesheet"
href="https://fonts.googleapis.com/css?family=Roboto:300,400,500"
/>
</Helmet>
{props.children}
{!isHomepage ? <Nav /> : null}
</div>
);
};
export default App;
nav.js
import React from 'react';
/* --- shared --- */
import * as data from './data';
import Ul from './ul';
const Nav = () => (
<div className="nav">
<div className="flex justify-between nav--top">
<p className="mh-auto f-mini fw3">
상담전화
<span className="f-regular"> xxx-xxxx-xxxx</span>
</p>
<Ul links={data.redirectToLogin} />
</div>
<h1>
<Ul links={data.redirectToHome} />
</h1>
<div className="hr-center">
<Ul links={data.nav} />
</div>
</div>
);
export default Nav;
ul.js
import React from 'react';
import { Link } from 'react-router-dom';
const Ul = ({ links }) => (
<ul className="nav-menu">
{links &&
links.map(e => (
<li>
<Link className={e.className} key={e.id} to={e.to}>
{e.name}
</Link>
</li>
))}
</ul>
);
export default Ul;
Home.js
import React from 'react';
/* --- Components --- */
import HomeMain from './Home.main';
/* --- Shared --- */
import Nav from '../shared/nav';
const Home = () => (
<div>
<header>
<Nav />
<div className="header-text--box">
<h2>
<span className="f-regular f-en lh-3">NO MSG!</span>
<br />
오늘도 열심히 일하는 당신에게 착한 가격의 집밥을 선물하세요.
</h2>
</div>
</header>
<HomeMain />
</div>
);
export default Home;
Version
react: 16.4.2
react-dom: 16.4.2
react-redux: 5.0.7
react-router-dom: 4.3.1
react-router-redux: 5.0.0-alpha.9
Thank you for taking your time to help me out.