React 教程第十三篇 —— Redux 跨组件通信进阶之 Provider 和 connect
结构
component1
- actions.js
- reducer.js
- component1.js
component2
- actions.js
- reducer.js
- component.js
redux
- tore.js
- app.js
组件 Component1
action.js
export function increment(){ return { type: "+" } } export function decrement(){ return { type: '-' } }
reducer.js
export default (state = 0, action) => { switch(action.type){ case '+': return state + 1; case '-': return state - 1; default: return state; } }
component.js
import React, {Component} from 'react' import {connect} from 'react-redux' import * as Actions from './actions' import Component2 from '../cp2/cp2' class Component1 extends Component{ increment = () => { console.log(this.props) this.props.increment(); } render(){ return ( <div> <h3>component-cp1-{this.props.cp1}</h3> <input type="button" value="increment" onClick={this.increment}/> <Component2 /> </div> ) } } const mapStateToProps = (store) => { return { cp1: store.cp1 } } export default connect(mapStateToProps, Actions)(Component1)
组件 component2
action.js
export function increment(){ return { type: "+" } } export function decrement(){ return { type: '-' } }
reducer.js
export default (state = 0, action) => { switch(action.type){ case '+': return state + 1; case '-': return state - 1; default: return state; } }
component.js
import React, {Component} from 'react' import {connect} from 'react-redux' import * as Actions from './actions' class Component2 extends Component{ render(){ return ( <div> <h3>component-cp2-{this.props.cp2}</h3> </div> ) } } const mapStateToProps = (store) => { return { cp1: store.cp1, cp2: store.cp2 } } export default connect(mapStateToProps, Actions)(Component2)
store.js
import {createStore} from 'redux'; import { combineReducers } from 'redux'; import cp1 from '../components/cp1/reducer' import cp2 from '../components/cp2/reducer' const rootReducer = combineReducers({ cp1, cp2 }); const store = createStore(rootReducer) export default store;
app.js
import React from 'react' import ReactDOM from 'react-dom' import {Router, hashHistory} from 'react-router' import {Provider} from 'react-redux' import store from './redux/configStore' import Component1 from './components/cp1/cp1' ReactDOM.render( <Provider store={store}> <Component1/> </Provider>, document.getElementById('app') )
小结
- 组件使用了
react-redux.connet
将state
和action
全部合并到了props
中去 connet
第一个参数为一个方法,该方法的第一个参数就是store
,也就是通过redux.combineReducers
来进行合并得到一个rootReducer
- 在最外层的根元素当中使用了
react-redux.Provider
组件,其属性store
就是通过redux.createStore
出来的store
- 当通过
props
调用actions
时,redux
隐性调用了store.dispath
,而不用手动去调用。 - 在
reducer
中返回的值,也会传到mapStateToProps
的参数当中去,而不用再手动调用store.getState()
相关推荐
opendigg 2020-06-02
weiqi 2020-04-29
mjzhang 2020-04-16
iftrueIloveit 2020-07-04
游走的豚鼠君 2020-11-10
81417707 2020-10-30
ctg 2020-10-14
小飞侠V 2020-09-25
PncLogon 2020-09-24
jipengx 2020-09-10
颤抖吧腿子 2020-09-04
wwzaqw 2020-09-04
maple00 2020-09-02
青蓝 2020-08-26
罗忠浩 2020-08-16
liduote 2020-08-13
不知道该写啥QAQ 2020-08-02
pengruiyu 2020-08-01