React Router v4 不渲染组件
React Router v4 not rendering components
React Router v4 渲染组件有问题。在应用程序的初始加载时,它将呈现与 URL 对应的正确组件,但是,任何后续的 Link
单击都不会呈现所需的组件。
图书馆
- React Router: 4.2.2
- 反应:15.6.1
- 反应DOM:15.6.1
- -- 仅提及图书馆以防产生影响--
- 反应终极版:5.0.6
- 终极版:3.7.2
- Material UI: 0.19.0
为简洁起见,将省略一些 imports
站点结构
index.jsx
|
App.jsx
|
Auth.jsx
|
Layout.jsx
<Routes />
index.jsx
import React from 'react';
import store from './store.js';
import ReactDOM from 'react-dom';
import { Provider } from 'react-redux';
import { BrowserRouter } from 'react-router-dom';
import createBrowserHistory from 'history/createBrowserHistory';
const history = createBrowserHistory();
import App from './containers/App.jsx';
ReactDOM.render(
<Provider store={store}>
<MuiThemeProvider muiTheme={muiTheme}>
<BrowserRouter>
<App />
</BrowserRouter>
</MuiThemeProvider>
</Provider>,
document.getElementById('root')
);
App.jsx
import React, { Component } from 'react';
import Auth from '../components/Auth.jsx';
class App extends Component {
render() {
return <Auth />;
}
}
Auth.jsx
import React from 'react';
import { Route } from 'react-router-dom';
import Layout from './Layout.jsx';
export default function Auth(props) {
//this Has a render function to render a Loader, Error Page, or the Layout
return <Layout />;
}
Layout.jsx
渲染整个应用程序涉及到更多的复杂性。我打算将其他布局组件注释掉,只提供一些链接和一个 Switch
组件,以便在使项目更加模块化之前使其正常工作。
import React, { Component } from 'react';
import { Link, Switch, Route } from 'react-router-dom';
import Overview from './views/overview/Overview.jsx';
import Home from './views/home/Home.jsx';
export default class Layout extends Component {
render() {
return (
<div className="layout">
{/* <TopBar /> */}
{/* <AppBar/> */}
{/* <Drawer>
<MainMenu/>
</Drawer> */}
<Link to="/">HOME</Link>
<Link to="/overview">Overview</Link>
<Switch>
<Route path="/" exact component={Home} />
<Route path="/overview" component={Overview} />
</Switch>
{/* <Routes /> */}
{/* <Footer /> */}
</div>
);
}
}
Routes.jsx
这就是我希望路由组件的样子。
import React from 'react';
import { Switch, Route } from 'react-router-dom';
import Home from './views/home/Home.jsx';
import Overview from './views/overview/Overview.jsx';
import Admin from './views/admin/Admin.jsx';
import NotFound from './NotFound.jsx';
export default function Routes(props) {
return (
<Switch>
<Route path="/" exact component={Home} />
<Route path="/overview" component={Overview} />
<Route path="/admin" component={Admin} />
<Route component={NotFound} />
</Switch>
);
}
我是否缺少让组件呈现点击 Link
的东西?我没有收到任何控制台错误或任何告诉我有问题的信息。所以不确定组件是否未正确包装或可能导致问题的原因。
看起来发生的事情是 Redux 集成阻止了更新。
需要:
import {withRouter} from 'react-router-dom';
export default withRouter(connect(mapStateToProps, mapDispatchToProps)(App))'
您也可以在连接中使用 pure: false
。
React Router v4 渲染组件有问题。在应用程序的初始加载时,它将呈现与 URL 对应的正确组件,但是,任何后续的 Link
单击都不会呈现所需的组件。
图书馆
- React Router: 4.2.2
- 反应:15.6.1
- 反应DOM:15.6.1
- -- 仅提及图书馆以防产生影响--
- 反应终极版:5.0.6
- 终极版:3.7.2
- Material UI: 0.19.0
为简洁起见,将省略一些 imports
站点结构
index.jsx
|
App.jsx
|
Auth.jsx
|
Layout.jsx
<Routes />
index.jsx
import React from 'react';
import store from './store.js';
import ReactDOM from 'react-dom';
import { Provider } from 'react-redux';
import { BrowserRouter } from 'react-router-dom';
import createBrowserHistory from 'history/createBrowserHistory';
const history = createBrowserHistory();
import App from './containers/App.jsx';
ReactDOM.render(
<Provider store={store}>
<MuiThemeProvider muiTheme={muiTheme}>
<BrowserRouter>
<App />
</BrowserRouter>
</MuiThemeProvider>
</Provider>,
document.getElementById('root')
);
App.jsx
import React, { Component } from 'react';
import Auth from '../components/Auth.jsx';
class App extends Component {
render() {
return <Auth />;
}
}
Auth.jsx
import React from 'react';
import { Route } from 'react-router-dom';
import Layout from './Layout.jsx';
export default function Auth(props) {
//this Has a render function to render a Loader, Error Page, or the Layout
return <Layout />;
}
Layout.jsx
渲染整个应用程序涉及到更多的复杂性。我打算将其他布局组件注释掉,只提供一些链接和一个 Switch
组件,以便在使项目更加模块化之前使其正常工作。
import React, { Component } from 'react';
import { Link, Switch, Route } from 'react-router-dom';
import Overview from './views/overview/Overview.jsx';
import Home from './views/home/Home.jsx';
export default class Layout extends Component {
render() {
return (
<div className="layout">
{/* <TopBar /> */}
{/* <AppBar/> */}
{/* <Drawer>
<MainMenu/>
</Drawer> */}
<Link to="/">HOME</Link>
<Link to="/overview">Overview</Link>
<Switch>
<Route path="/" exact component={Home} />
<Route path="/overview" component={Overview} />
</Switch>
{/* <Routes /> */}
{/* <Footer /> */}
</div>
);
}
}
Routes.jsx
这就是我希望路由组件的样子。
import React from 'react';
import { Switch, Route } from 'react-router-dom';
import Home from './views/home/Home.jsx';
import Overview from './views/overview/Overview.jsx';
import Admin from './views/admin/Admin.jsx';
import NotFound from './NotFound.jsx';
export default function Routes(props) {
return (
<Switch>
<Route path="/" exact component={Home} />
<Route path="/overview" component={Overview} />
<Route path="/admin" component={Admin} />
<Route component={NotFound} />
</Switch>
);
}
我是否缺少让组件呈现点击 Link
的东西?我没有收到任何控制台错误或任何告诉我有问题的信息。所以不确定组件是否未正确包装或可能导致问题的原因。
看起来发生的事情是 Redux 集成阻止了更新。
需要:
import {withRouter} from 'react-router-dom';
export default withRouter(connect(mapStateToProps, mapDispatchToProps)(App))'
您也可以在连接中使用 pure: false
。