三层
视图(view)
数据商店(store)
reducer 
流程: 用户操作视图 视图产生action 通过store转发给reducer(同时还会接收store中的数据模型 state)
由reducer结合aciton.type以及state 产生新的 state 然后返回给 store
store在接收到新的state后 通知视图进行更新
redux使用:
    需要安装2个模块
    npm i redux react-redux -S
    创建store
    import redux from "redux"
export let store = redux.createStore(reducer)
reducer的定义
    export let reducer = (state={title:""},action){
        switch(action.type){
            case "xxx":
                return newState = {...state,xxx:ddd}
                break
            default:
                return state
        }
    }
视图内使用
    绑定更新视图函数
    this.unbind = store.subscribe(()=>{})
    解绑更新视图函数
    this.unbind()
    发送action
    sotre.dispatch(action)
工具方法
    1自动生成容器组件
        前提  整个应用需要用<Provider>包裹起来 并且要注入store 例如:
        import {Provider} from "react-redux"
        
        let App = props => (
            <Provider store={store}>
                <Router>
                    <Switch>
                        <Route />
                        ....
                    </Switch>
                </Router>
            </Provider>
        )
render(<App/>,docu....)
然后在UI组件内 导入connect方法
import {connect} from "react-redux"
    class UI extends React.Component{
        ...
    }
    let mstp = state => {
        return {
            title : state.home.title
        }
    }
    //在组件内  使用  this.props.title
    let mstp = dispatch => {
        return {
            sayHello : function(){
                ....
            }
        }
    }
    //在组件内使用sayHello方法  :   this.props.sayHello()
    //如果在函数中要发送action 则调用dispatch即可
export let Home = connect(mstp,mdtp)(UI)
合并reducer
    可以对reducer按照功能或者页面进行划分成多个小的reducer
    然后通过 combineReducers  具体如下
    let reducer1 = (state={...},action)=>{
        ...
    }
    let reducer2 = (state={...},action)=>{
        ...
    }
import {combineReducers} from "redux"
    export let reducer = combineReducers({
        home : reducer1,
        list : reducer2
    })
原文:https://www.cnblogs.com/lishixiang-007/p/11337453.html