具体代码是这样的:app.js是入口文件
在app.js中provider包含了子组件Main,接下来是Main的代码:
打印props,是个空的对象,但是app.js可以打印出state。求大神解决
Redux用Provider传递store时为什么子组件收不到props
收不到原因有两个,一个是没有传下去,另一个是传下去了操作不当,一般你看connect中是不是拿到了数据树上的数据,console.log( this.props.+你要看的数据 );看看是否可以打印,如果没有那你看看是不是connect写的不对,如果有值,那就看你本组件是否用的得当。
这就涉及到什么是provider,中文意思即提供者。
那它的作用也正如中文描述那样,它是一个组件,来提供store数据。它能够让所有的子组件隔n层去轻易获取到全局的state数据,而不是一层层props去传递。
那provider是怎么做的呢,他也只是一个组件而已,不要想的多么复杂。他只是使用了context去做到这一点的
所以,store只是传递给了Provider组件,作为Provider组件的props,Provider提供了context,Main组件只是Provider的子组件而已。各个子组件想要获取到store中state的数据,只需要connect就行了,connect会从context中get到state全局数据。
另外,你可以安装chrome扩展,React Developer Tools,很清楚查看到各个组件的关系,不用不断的console,如下:
对于需要的关联redux的组件
import { connect } from ‘react-redux’
const mapStateToProps = state => {
return {
selected: state.navigationSelected
}
}
const mapDispatchToProps = dispatch => {
return {
setNavigationSelected: value => dispatch(Action.setNavigationSelected(value)),
setLoading: value => dispatch(Action.setLoading(value))
}
}
export default connect(
mapStateToProps,
mapDispatchToProps
)(Component)