【发布时间】:2019-02-19 19:44:06
【问题描述】:
我正在使用 react-router v4 在 React 中进行路由。我面临的问题是 react-router 更改了位置,但无法渲染组件。我听说将 redux 与 react blocks updates 一起使用,但我这里没有使用 redux。
Sidebar.js
import React, {Component} from 'react';
import {
BrowserRouter as Router,
Link
} from 'react-router-dom';
import $ from 'jquery';
import {withRouter} from 'react-router-dom';
class Sidebar extends Component {
render () {
return (
<Router>
<div>
<button className="navbar-toggler" data-toggle="collapse" data-target="#pill">
<span><i className="fa fa-ellipsis-v"></i> menu</span>
</button>
<div id="pill">
<ul className="nav nav-pills flex-column sidebar">
<li className="nav-item">
<Link to="/" className="nav-link">
<i className="fa fa-dashboard"></i> Dashboard
</Link>
</li>
<li className="nav-item">
<a href="#students" className="nav-link" data-toggle="collapse">
<i className="fa fa-users"></i> Students
</a>
<ul className="collapse" id="students" style={{marginLeft: '-25px'}}>
<li className="nav-item"><Link to="/students" className="nav-link"><i className="fa fa-eye"></i> View students</Link></li>
</ul>
</li>
</ul>
</div>
</div>
</Router>
)
}
}
export default withRouter(Sidebar);
App.js
import React, { Component } from 'react';
import Navbar from './Navbar';
import Sidebar from './Sidebar';
import {BrowserRouter as Router, Route} from 'react-router-dom';
import Dashboard from './Dashboard';
import Students from './Students';
class App extends Component {
render() {
const { match } = this.props;
return (
<Router>
<div>
<Navbar />
<div className="container-fluid main">
<div className="row">
<div className="col-sm-2 area-left">
<Sidebar />
</div>
<div className="col-sm-10 area-right float-right">
<div>
<Route exact path="/" component={Dashboard} />
<Route exact path="/students" component={Students} />
</div>
</div>
</div>
</div>
</div>
</Router>
);
}
}
export default App;
当路线是/
当路线是/students
重新加载页面渲染组件
【问题讨论】:
-
为什么您的应用程序中有两个路由器?路由器是 HOC 提供者,每个应用程序只需要一个。它包装了您的整个项目。
-
@mattdevio 你能给我答案的解决方案让我很好理解吗?
-
尝试直接从 react-router-dom 而不是 BrowserRouter 导入“Router”。此外,您的侧边栏中不需要路由器。你只需要用路由器包装你的顶级组件并在你的组件中使用 Link 来重定向。
标签: reactjs routing react-router-v4