Vis*_*ati 19 reactjs react-router-component redux react-redux react-router-v4
使用React router v4开发React应用程序.一切顺利,直到我在我的应用程序中介绍了Redux.从那以后点击链接更改路由,浏览器URL会发生变化,但是路径对应的组件没有加载.如果我注释掉Redux代码,它会很好用.可能是什么导致了这个?这是我的路由代码:
import React, { Component } from 'react';
import { Switch, Route, Link } from 'react-router-dom';
import LeftSubDefault from './../components/left-sub-default.component';
import LeftSubOne from './../components/left-sub-one.component';
import LeftSubTwo from './../components/left-sub-two.component';
import { withRouter } from 'react-router-dom';
import { connect } from "react-redux";
import { goToLeftDefault, goToLeftOne, goToLeftTwo } from "./../actions/leftRouteActions.js";
class LeftComponent extends Component {
render() {
return (
<div className="col-xs-6">
<p>
Current sub route: {this.props.currentRoute}
</p>
<ul>
<li onClick={this.props.goToDefault}><Link to={'/'}>Go To Default</Link></li>
<li onClick={this.props.goToSub1}><Link to={'/left-sub1'}>Go To One</Link></li>
<li onClick={this.props.goToSub2}><Link to={'/left-sub2'}>Go To Two</Link></li>
</ul>
<Switch>
<Route exact path='/' component={LeftSubDefault} />
<Route exact path='/left-sub1' component={LeftSubOne} />
<Route exact path='/left-sub2' component={LeftSubTwo} />
</Switch>
</div>
);
}
}
const mapStateToProps = (store) => {
return {
currentRoute: store.routes.currentRoute
};
}
const mapDispatchToProps = (dispatch) => {
return {
goToDefault: () => {
dispatch(goToLeftDefault())
},
goToSub1: () => {
dispatch(goToLeftOne())
},
goToSub2: () => {
dispatch(goToLeftTwo())
}
};
}
export default withRouter(connect(mapStateToProps, mapDispatchToProps)(LeftComponent));
Run Code Online (Sandbox Code Playgroud)
PS:我在控制台中没有错误.代码运行干净只是组件不加载.这是github上的类似线程:4671.我在各个站点上看到了很多线程,但没有解决此问题的方法.
Iva*_*aev 53
哈,现在我正在用react-router和redux做一个项目=).
查看有关redux集成的官方文档https://reacttraining.com/react-router/web/guides/redux-integration.
我认为重点是withRouter和connectHocs的顺序.
问题是Redux实现了shouldComponentUpdate,如果它没有从路由器接收道具,则没有任何迹象表明有任何改变.这很容易解决.找到连接组件的位置并将其包装在withRouter中.
来自官方文档.
UPD
import { withRouter } from 'react-router-dom';
import { connect } from 'react-redux';
class Home extends React.Component {...}
export default withRouter(
connect(mapStateToPropsFunc)(Home)
);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
10652 次 |
| 最近记录: |