component1javascript
component2java
reduxreact
export default { increment(){ return { type: "+" } }, decrement(){ return { type: '-' } } }
export default (state = 0, action) => { switch(action.type){ case '+': return state + 1; case '-': return state - 1; default: return state; } }
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> ) } }
export default { increment(){ return { type: "+" } }, decrement(){ return { type: '-' } } }
export default (state = 0, action) => { switch(action.type){ case '+': return state + 1; case '-': return state - 1; default: return state; } }
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> ) } }
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
已实现两个组件之间的通讯redux
actions
和reducer
reducer
经过redux.combineReducers
来进行合并获得一个rootReducer
,最后用createStore
来完成store
的建立生成。store.getState()
获得的是rootReducer
后的对象{cp1: 0, cp2: 0}
store.dispath
会同时改变rootReducer
里面的属性cp1
和cp2
,由于触发了reducer
,并且两个action.type
都是同样的,因此同时修改rootReducer
,则须要变改不一样组件action.type
action.type
能统一管理,能够派生出多一个层constants
,后面的案例会用到这个层