所有容器組件都可以訪問 Redux store,所以可以手動監聽它。一種方式是把它以 props 的形式傳入到所有容器組件中。但這太麻煩了,因爲必須要用 store
把展示組件包裹一層,僅僅是因爲恰好在組件樹中渲染了一個容器組件。
建議的方式是使用指定的 React Redux 組件 <Provider>
來 魔法般的 讓所有容器組件都可以訪問
store,而不必顯示地傳遞它。只需要在渲染根組件時使用即可。
<Provider store>使組件層級中的 connect()方法都能夠獲得 Redux store。正常情況下,你的根組件應該嵌套在 <Provider>中才能使用 connect()方法。
index.js
import React from 'react'
import { render } from 'react-dom'
import { Provider } from 'react-redux'
import { createStore } from 'redux'
import todoApp from './reducers'
import App from './components/App'
let store = createStore(todoApp)
render(
<Provider store={store}>
<App />
</Provider>,
document.getElementById('root')
)
<Provider>的原理:使用用了react中的context屬性:
源碼如下:
class Provider extends Component{
getChildContext(){
retrun {
store:this.props.store
};
}
render(){
return this.props.children;
}
}
Provider.childContextTypes = {
store:React.PropTypes.object
}