单击 <Link> 时,react-router 4 不会更新 UI
react-router 4 doesn't update UI when clicking <Link>
我正在使用 react-router-dom 4.1.1
编写一个带有导航栏和 5 条路线的小应用程序。当我点击导航栏中的link时,Firefox地址栏中的URL更新,但显示的页面没有变化。但是,如果我在地址栏中输入子页面的地址,则会显示正确的页面。
app.js:
render(
<Provider store={store}>
<HashRouter>
<MainContainer />
</HashRouter>
</Provider>,
document.querySelector('.app')
);
Main.js:
render() {
return (
<div className="main">
<Message message= {this.props.message} />
<NavigationBar />
<Switch>
<Route exact path="/" component={HomePage}></Route>
<Route path="/classify" component={ClassifyPage}></Route>
<Route path="/admin" component={AdminPage}></Route>
<Route path="/users" component={UsersPage}></Route>
<Route path="/help" component={HelpPage}></Route>
</Switch>
</div>
);
}
似乎某些组件(例如使用 connect() 的 react-redux 容器)会阻止更新。使用 withRouter():
解决了这个问题
const MainContainer = withRouter(connect(
mapStateToProps,
mapDispatchToProps
)(Main));
Erik Winge 几乎是正确的。
据我了解您输入的组件,您需要使用 withRouter 包装您的组件。
因此,要解决此问题,您需要添加:
...
Main = withRouter(Main);
...
export default Main;
...
我有同样的错误,但是当我使用 withRouter 时,没有任何变化。在我的例子中,错误的原因是将 <Link>
元素放入 <Router>
标记中。
<Router>
<Link to="something"></Link>
</Router>
当心这个错误,很难诊断!要解决此问题,只需删除不必要的 <Router>
wrapper
我正在使用 react-router-dom 4.1.1
编写一个带有导航栏和 5 条路线的小应用程序。当我点击导航栏中的link时,Firefox地址栏中的URL更新,但显示的页面没有变化。但是,如果我在地址栏中输入子页面的地址,则会显示正确的页面。
app.js:
render(
<Provider store={store}>
<HashRouter>
<MainContainer />
</HashRouter>
</Provider>,
document.querySelector('.app')
);
Main.js:
render() {
return (
<div className="main">
<Message message= {this.props.message} />
<NavigationBar />
<Switch>
<Route exact path="/" component={HomePage}></Route>
<Route path="/classify" component={ClassifyPage}></Route>
<Route path="/admin" component={AdminPage}></Route>
<Route path="/users" component={UsersPage}></Route>
<Route path="/help" component={HelpPage}></Route>
</Switch>
</div>
);
}
似乎某些组件(例如使用 connect() 的 react-redux 容器)会阻止更新。使用 withRouter():
解决了这个问题const MainContainer = withRouter(connect(
mapStateToProps,
mapDispatchToProps
)(Main));
Erik Winge 几乎是正确的。 据我了解您输入的组件,您需要使用 withRouter 包装您的组件。
因此,要解决此问题,您需要添加:
...
Main = withRouter(Main);
...
export default Main;
...
我有同样的错误,但是当我使用 withRouter 时,没有任何变化。在我的例子中,错误的原因是将 <Link>
元素放入 <Router>
标记中。
<Router>
<Link to="something"></Link>
</Router>
当心这个错误,很难诊断!要解决此问题,只需删除不必要的 <Router>
wrapper