javascript - 反应 routings-url 的变化。但不渲染组件。刷新页面时完美呈现
问题描述
这是反应路由中的一个著名问题。但自上周以来我没有任何解决方案。这是一个大问题,我希望对此有任何回答。我有三个组件,例如 Admin.js、AdminReview.js 和 AdminDashboard.js,如下所示。
有我的 index.js 文件。
index.js
<Provider store={store}>
<BrowserRouter basename="/">
<App/>
</BrowserRouter>
</Provider>
Admin.js 文件位于 App.js 文件中。有 Admin.js 并且它有路由。
管理员.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 是高阶组件,它使用导入
反应路由器dom
根据反应文档防止块更新。
我使用导航栏导航到上述路线。这是我的 AdminNavbar.js 文件。
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));
我目前正在阅读更多与此相关的文章,但我无法解决这个问题。请任何人都可以帮助解决这个问题?
解决方案
经过长时间的测试,我和我的朋友终于找到了解决方案。如果我们谈论我们的组件结构,它如下所示。
index.js
<Provider store={store}>
<BrowserRouter basename="/">
<App/>
</BrowserRouter>
应用程序.js
<div>
<MainLayout/>
</div>
MainLayout.js
<div>
<AdminLayout/>
</div>
AdminLayout.js
<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 的连接,所以我用 withRouter hoc 包装了这些
反应路由器dom
那是错的。我们应该只包装路由使用的组件。例如 AdminLayout.js。但是有问题,因为 MainLayout.js 也使用了连接,所以不应该接收子组件的 props。所以最后我还包装了 withRouter 中的 MainLayout.js。现在我包装了 withRouter 中的两个组件,例如 AdminLayout.js 和 MainLayout.js。然后路由完美地工作。
推荐阅读
- unit-testing - 无法在 SonarQube 中查看代码覆盖率。使用 TestHost 和相关类型在 DotNetCore 中测试 API Endpoint
- flutter - 如何使用 Flutter 提供程序包从列表中添加和删除项目?
- python - 获取笔记本的详细实时报告/监控
- apache-pulsar - 生产者是否有可能知道消息是否被确认?
- python - 使用 python 多处理实现预取
- javascript - 在 ngx summernote 中修补下拉值时的格式问题
- python - 从python中的回收站恢复文件
- dataframe - julia dataframe - 如何按组获取下一行的值
- mysql - AFTER INSERT 触发器在 MySQL 中无法用于修改不同列中的数据
- arrays - 查找数组中唯一对的第 k 个最低和