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
,後面的案例會用到這個層