最新公告
  • 欢迎您光临起源地模板网,本站秉承服务宗旨 履行“站长”责任,销售只是起点 服务永无止境!立即加入钻石VIP
  • React学习第七天

    正文概述 掘金(周帅帅)   2021-08-23   447

    这是我参与8月更文挑战的第23天,活动详情查看:更文挑战

    redux

    redux严格按照flux思想实现的一套框架,实现了单一数据流向。

    组成部分

    redux由四部分组成

    action 组件发布的消息

    store 存储消息的

    reducers 捕获action,处理数据的方法

    view 组件视图了

    通信流程

    一个组件发布action

    action通过store被reducers捕获

    reducers根据消息的类型处理数据

    reducers将新的数据存储在store中

    store将更新的数据传递给另一个组件

    注意:通信过程中,数据是作为state来存储了。

    redux三大原则

    单一数据源

    整个应用中有且只能有一个store对象。

    state是只读的

    整个应用中的数据state是只读的,我们不能修改。我们可以通过getState方法获取state,但是不论是在组件中,还是在reducer中,我们不能直接修改state,在组件中,我们要发布action来修改state。

    函数式编程

    redux为了让我们开发更简单,建议我们采用函数式编程,也就是说每一个reducer都是一个函数,在函数中,我们更新state数据

    React学习第七天

    体验redux

    redux在设计之初,并不只是针对于react来设计了,希望能够在各个框架中使用,因此核心模块被抽象成可以公用的了,向在其他框架中使用,我们要安装相应的插件

    redux要在es6开发中使用,因此我们要安装该模块

    npm install redux

    redux模块提供了一些方法,供我们使用

    React学习第七天

    redux方法

    createStore 用来创建store的

    参数是reducers方法

    返回值是store对象

    作用:存储应用程序的state数据

    combineReducers 合并多个reducers

    例如:使用路由的时候,可以通过该方法,合并路由的reducers

    applyMiddleware 添加中间件

    例如:在异步action中,添加中间件。

    action

    action就是一个消息对象,用来定义消息类型,和消息数据

    通常用type表示消息类型(类型通常是不变,所以工作中要定义成常量)

    数据部分属性名称没有限制,可以是任意的,例如data等等

    reducers

    用来接收action并处理的,类似观察者模式中的on方法,或者vuex中的mutations。

    在redux中,被设计成一个函数

    第一个参数表示state对象

    第二个参数表示action对象

    必须有返回值,就是更新的state数据

    注意:如果state是引用类型的数据,一定要先复制再返回。

    就是说要返回一个新的state对象。

    当我们在创建store的时候,为了让state有默认值,会默认执行一次reducer,因此我们可以为state定义默认值并返回

    store对象

    dispatch 用来发布消息的(相当于观察者模式中trigger方法)

    getState 获取state数据

    replaceReducer 替代reducer

    subscribe 监听state变化的

    symbol symbol对象

    React学习第七天

    举例:

    // 引入redux
    import { createStore } from 'redux';
    // console.log(Redux);
    // 消息名称定义成常量
    const ADD = 'add';
    const REMOVE = 'remove';
    // 定义消息
    let addNum = { type: ADD, num: 10 }
    let removeNum = { type: REMOVE, num: 5 }
    // 定义reduer
    function reducer(state = 0, action) {
         // console.log('reducer', state, action);
         // 分析aciton类型
         switch (action.type) {
              case ADD:
              // 值类型数据,可以直接修改
              state += action.num;
              break;
              case REMOVE:
              // 处理减少数字的消息
              state -= action.num;
              break;
         }
         // 必须有返回值,就是新的state
         return state;
    }
    // 创建store, 传递reducer
    let store = createStore(reducer);
    // 查看store
    console.log(store)
    // 监听state变化, 一定要在执行之前监听
    store.subscribe(res => console.log(store.getState())) 
    // 解构方法
    let { dispatch } = store;
    // 发布action
    // store.dispatch(addNum)
    dispatch(addNum)
    dispatch(addNum)
    dispatch(addNum)
    dispatch(removeNum)
    

    起源地下载网 » React学习第七天

    常见问题FAQ

    免费下载或者VIP会员专享资源能否直接商用?
    本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
    提示下载完但解压或打开不了?
    最常见的情况是下载不完整: 可对比下载完压缩包的与网盘上的容量,若小于网盘提示的容量则是这个原因。这是浏览器下载的bug,建议用百度网盘软件或迅雷下载。若排除这种情况,可在对应资源底部留言,或 联络我们.。
    找不到素材资源介绍文章里的示例图片?
    对于PPT,KEY,Mockups,APP,网页模版等类型的素材,文章内用于介绍的图片通常并不包含在对应可供下载素材包内。这些相关商业图片需另外购买,且本站不负责(也没有办法)找到出处。 同样地一些字体文件也是这种情况,但部分素材会在素材包内有一份字体下载链接清单。
    模板不会安装或需要功能定制以及二次开发?
    请QQ联系我们

    发表评论

    还没有评论,快来抢沙发吧!

    如需帝国cms功能定制以及二次开发请联系我们

    联系作者

    请选择支付方式

    ×
    迅虎支付宝
    迅虎微信
    支付宝当面付
    余额支付
    ×
    微信扫码支付 0 元