美文网首页
Redux中间件

Redux中间件

作者: 諾城 | 来源:发表于2020-08-18 16:41 被阅读0次

    在上一篇文章中讲了redux的使用,redux中保存的counter是一个本地定义的数据,我们可以直接通过同步的操作来dispatch action,state就会被立即更新。
    但是实际的开发中,redux中管理的很多数据可能来自服务器,我们需要进行异步的请求,再将数据保存到redux中。就是说在异步的网络请求中通过dispatch action来更新state中的数据。这时候就需要用到Redux中间件了。
    具体应用如下:
    一、中间件的引入,安装redux-thunk

    yarn add redux-thunk
    

    二、在创建store时传入应用了middleware的enhance函数
    1、通过applyMiddleware来结合多个Middleware, 返回一个enhancer;
    2、将enhancer作为第二个参数传入到createStore中;

    import { createStore, applyMiddleware, compose } from 'redux';
    import thunkMiddleware from 'redux-thunk'
    import reducer from './reducer';
    
    const composeEnhancers = window.__REDUX_DEVTOOLS_EXTENSION_COMPOSE__ || compose;
    
    // 通过applyMiddleware来结合多个Middleware, 返回一个enhancer
    const enhancer = composeEnhancers(applyMiddleware(thunkMiddleware));
    
    const store = createStore(reducer, enhancer);
    
    export default store;
    

    三、在actionCreators.js中定义一个方法getJokeData,方法内部进行网络请求,在网络请求成功的回调中调用其他的action去更新store管理的数据。

    import {
      ADD_NUMBER,
    } from './constants.js'
    import axios from 'axios'
    
    const addAction = (count) => ({
      type: ADD_NUMBER,
      num: count
    });
    
    const getJokeData = () => {
      return (dispatch) => {
        axios.get('https://autumnfish.cn/api/joke/list?num=1')
        .then(res => {
          // 网络请求成功后,调用addAction方法去更新counter数据
          dispatch(addAction(6))
        })
      }
    }
    
    export {
      addAction,
      getJokeData
    }
    

    我的理解是像网络请求这种异步操作,获取到的数据要用来去更新store管理的数据,就需要在网络请求的回调中,去触发能更新store中管理数据的action,这种异步操作需要通过中间件来实现。

    相关文章

      网友评论

          本文标题:Redux中间件

          本文链接:https://www.haomeiwen.com/subject/ildkjktx.html