zoukankan      html  css  js  c++  java
  • redux的详细介绍和使用!

    三层

    视图(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://segmentfault.com/a/1190000011474522?utm_source=tag-newest

  • 相关阅读:
    Spring学习(1):侵入式与非侵入式,轻量级与重量级
    集群结构、分布式结构、单机结构
    使用Idea工具创建Maven WebApp项目
    文件上传:CommonsMultipartResolver
    Memcached
    Window下部署MySql数据库
    HashCode详解
    JDK源码分析:Object.java
    二进制运算
    关于打印日志几个方法的列举
  • 原文地址:https://www.cnblogs.com/lishixiang-007/p/11337453.html
Copyright © 2011-2022 走看看