redux 中间件 redux-thunk

什么是中间件? 中间件指的是redux的,不是react的。中间指的是actionstore之间,也就是对dispacth方的封装,最原始的是直接将接受过来的对象直接传递给store,但是如果传递的是一个函数的话,就不会将这直接传递给store,而是先执行这个函数。

这里写图片描述

常见的中间有
redux-devtools-extension`redux-thunk,redux-saga,redux-log

一 、redux-thunk

redux-thunk 的引出: 组件中引入过多的异步请求,会使得组件变得异常的臃肿,为了解决这个我问题,redux-thunk 中间件 将异步请求放在action 里面进行实现。

异步函数放在组件的生命周期里面,会使得异步组件更加的难易维护,也很方便自动化测试

1: 安装:
yarn add redux-thunk

redux-thunk 是作用于创建 store的时候

2: 问题:一般我本地开发需要配置redux-devtools-extension,文档有对应的解决办法,参考在线文档地址

// store/index.js

import { createStore, applyMiddleware, compose } from 'redux';
import thunk from 'redux-thunk';
import reducer from './reducer'

// typeof window === 'object' 判断是不是浏览器环境 
const composeEnhancers =  window.__REDUX_DEVTOOLS_EXTENSION_COMPOSE__ ? window.__REDUX_DEVTOOLS_EXTENSION_COMPOSE__({ }) : compose

const enhancer = composeEnhancers(
   applyMiddleware(thunk)
);

const store  =  createStore( reducer, enhancer )
export default store

3:使用:
普通的 actionCreater 返回的是一个函数,return的是一个对象

export const getHandleInput_action = (value) =>({
        type:CHANGE_INPUT_VALUE,
        value  
})

但是使用redux-thunk的时候return出去的可以是一个函数,函数可以直接接受一个参数dispatch .

  ./store/actionCreator.js

export const getInitData = () =>{
    return (dispatch)=>{
        axios.get('/test.json')
        .then((res)=>{
            let actions = {
                type:'init_state_sync',
                value: res.data.list
            }
            dispatch(actions)
        })
    }
}

使用redux-thunk 的时候 storedispatch就也可以发送一个函数给store了,并且会自动执行以下这个函数

  import {getInitData} from './store/actionCreator'
  componentDidMount(){
       store.dispatch( getInitData() )
    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值