![](/img/trans.png)
[英]React Browserrouter Url changes but page/components render only on refresh
[英]React routings-url changes. but doesn't render components. when refresh the page it renders perfectly
这是反应路由中的一个著名问题。 但是自最近两周以来我没有任何解决方案。这是一个大问题,我希望对此有任何答案。 我有以下三个组件,例如Admin.js,AdminReview.js和AdminDashboard.js。
有我的index.js文件。
<Provider store={store}>
<BrowserRouter basename="/">
<App/>
</BrowserRouter>
</Provider>
Admin.js文件位于App.js文件中。存在Admin.js并且具有路由。
return(
<div>
<BackdropLoading show={this.props.result} />
<Switch>
<Route path="/interactions" component={AdminReview} />
<Route path="/" exact component={AdminDashbord} />
</Switch>
</div>
)
我在Admin.js文件中使用了redux,如下所示。
export default connect(mapStateToProps, mapDispatchToProps)( Admin);
AdminReview.js和AdminDashboard.js是普通文件,但如下使用了redux。
export default withRouter(connect(mapStateToProps, mapDispatchToProps)(AdminReview));
export default withRouter(connect(mapStateToProps, mapDispatchToProps)(AdminDashbord));
withRouter是高阶组件,它使用
反应路由器域
根据反应文档防止块更新。
我使用导航栏导航到上述路线。这是我的AdminNavbar.js文件。
<form className="form-inline my-2 my-lg-0">
<ul className="navbar-nav" style={{float: 'right',marginBottom:'-10px'}}>
<li id="reviewId" className="nav-item" style={liStyle}>
<Link to="/interactions" onClick={this.reviewClick}
className="nav-link js-scroll-trigger"
style={linkStyle}>
<small>Interactions</small>
</Link>
</li>
<li id="reportId" className="nav-item"
style={{cursor: 'pointer', float: 'right', borderBottom: '1px solid transparent'}}>
<Link to="/report" onClick={this.reportClick}
className="nav-link js-scroll-trigger"
style={linkStyle}>
<small>Reports</small>
</Link>
</li>
<li className="nav-item"
style={{cursor: 'pointer', float: 'right', paddingTop: '7px'}}>
<img src={dollerIcon} alt="icon" style={{width:'20px'}}/>
</li>
<li id="dashbordId" className="nav-item" style={{
cursor: 'pointer',
float: 'right',
borderBottom: '1px solid transparent',
paddingTop: '2%'
}}>
<ProfileDropdown user="admin"/>
</li>
</ul>
</form>
AdminNavbar还使用了如下的redux。
export default withRouter(connect(mapStateToProps, mapDispatchToProps)(AdminNavbar));
我目前正在阅读与此相关的更多文章,但是我无法解决此问题。请任何人可以帮助解决此问题?
经过长时间的测试,我和我的朋友终于找到了解决方案。 如果我们谈论我们的组件结构,则如下所示。
<Provider store={store}>
<BrowserRouter basename="/">
<App/>
</BrowserRouter>
<div>
<MainLayout/>
</div>
<div>
<AdminLayout/>
</div>
<div>
<BackdropLoading show={this.props.result} />
<Switch>
<Route path="/interactions" component={AdminReview} />
<Route path="/" exact component={AdminDashbord} />
</Switch>
</div>
我在MainLayout.js,AdminLayout.js和AdminReview.js和AdminDashboard.js中使用react redux的连接,所以我将它们与Router hoc一起包装
反应路由器域
那是错的。 我们应该只包装路由使用的组件。 例如AdminLayout.js。 但是有问题,因为不应该接收子组件,因为MainLayout.js也使用connect。 所以最后我也包装了withRouter的MainLayout.js。现在我包装了withRouter的两个组件,例如AdminLayout.js和MainLayout.js。 那么路由就可以完美地工作了。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.