redux和react-router一起使用时怎样向子组件传递store和reducers( 二 )


■网友
provider包好以后,子组件不需要去关心reducer、action、dispatch这些东西。比如一个组件:\u0026lt;A\u0026gt;\u0026lt;B\u0026gt;\u0026lt;/B\u0026gt;\u0026lt;/A\u0026gt;,A组件是顶层组件,绑定了dispatch、storestate,现在有个需求就是B组件点击以后触发一个事件会改变state数据。一个实现就是,相关触发action并dispatch action的函数定义在A中(因为A能访问到dispatch storestate等),然后A再将这个函数作为props传递给B组件的onClick事件,这样B就和redux没有任何关系了。这样做的好处主要还在于可以重用B组件。如果把dispatch storestate传给B,那么B组件就和redux有依赖,并不是所有的地方都会用到redux。B只需要关心click以后调用哪一个onclick函数就行,而不需要去关心onclick里边的具体实现(action reducer相关)
■网友
正在学习

■网友
redux和react-router一起使用时怎样向子组件传递store和reducers
【redux和react-router一起使用时怎样向子组件传递store和reducers】

■网友
通过高阶组件获取
■网友
我是题主,试了一下发现react-router中也能用Provider+Connect,像下面这样//Provider包住Router,传进storerender( \u0026lt;Provider store={store}\u0026gt; \u0026lt;Router\u0026gt; \u0026lt;Route path=\u0026#39;/\u0026#39; component={App}\u0026gt; \u0026lt;Route path=\u0026#39;/section\u0026#39; component={Section}\u0026gt;\u0026lt;/Route\u0026gt; \u0026lt;/Route\u0026gt; \u0026lt;/Router\u0026gt; \u0026lt;/Provider\u0026gt;, document.getElementById(\u0026#39;root\u0026#39;))//子组件中像顶层App组件一样用connect获取todos和actionsclass Section extends Component{ sub(el){ const {actions}=this.props actions.addItem(el) } render(){ const {todos,actions}=this.props return( \u0026lt;ul\u0026gt; {todos.map(todo=\u0026gt;\u0026lt;Item todo={todo} actions={actions}/\u0026gt;)} \u0026lt;/ul\u0026gt; ) }}function mapStateToProps(state){ ...}function mapDispatchToProps(dispatch){ ...}export default connect( mapStateToProps, mapDispatchToProps)(Section)这样的话每个子组件都要引入connect和bindActionCreators方法,并实现connect方法,会有大量重复代码。有没有一种方法可以只在顶层App组件内实现一次connect,然后通过props把todos和actions往下传递的方法呢?


推荐阅读