React 教程第十二篇 —— Redux 跨组件通信入门之 combineReducers
结构
component1
- actions.js
- reducer.js
- component1.js
component2
- actions.js
- reducer.js
- component.js
redux
- store.js
组件 Component1
action.js
export default { increment(){ return { type: "+" } }, 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 Actions from './actions' import Reducer from './reducer' import store from '../../redux/configStore' import Component2 from '../cp2/cp2' export default class Component1 extends Component{ constructor(props){ super(props); this.state = {count: 0} } increment = () => { store.dispatch(Actions.increment()); this.setState({ count: store.getState().cp1 }) } render(){ return ( <div> <h3>component-cp1-{store.getState().cp1}</h3> <input type="button" value="increment" onClick={this.increment}/> <Component2 /> </div> ) } }
组件 component2
action.js
export default { increment(){ return { type: "+" } }, 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 Actions from './actions' import Reducer from './reducer' import store from '../../redux/configStore' export default class Component2 extends Component{ increment = () => { store.dispatch(Actions.increment()); this.setState({ count: store.getState().cp1 }) } render(){ return ( <div> <h3>component-cp2-{store.getState().cp2}</h3> </div> ) } }
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;
小结
通过共同调用store
已实现两个组件之间的通信
- 多个组件之间,每个组件都有单独的
actions
和reducer
- 多个组件之间的
reducer
通过redux.combineReducers
来进行合并得到一个rootReducer
,最后用createStore
来完成store
的创建生成。 - 在 View 层通过
store.getState()
得到的是rootReducer
后的对象{cp1: 0, cp2: 0}
store.dispath
会同时改变rootReducer
里面的属性cp1
和cp2
,因为触发了reducer
,而且两个action.type
都是一样的,所以同时修改- 如果想做到单独修改
rootReducer
,则需要变改不同组件action.type
- 为了
action.type
能统一管理,可以派生出多一个层constants
,后面的案例会用到这个层
相关推荐
iftrueIloveit 2020-07-04
opendigg 2020-06-02
weiqi 2020-04-29
mjzhang 2020-04-16
游走的豚鼠君 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