Redux的中间件是什么?有哪些?如何使用?

react组件上,store.getState() --->Middleware---> dispatch --> reducer中 -> action修改state数据,---> 更新页面的渲染

这样的话我们可以让dispatch提交数据的时候做不同的事情

  • 若传递的action是一个对象,那dispatch直接传给store

  • 若传递的action是一个函数,那dispatch通过middleware中间件(redux-thunk)直接自动执行函数,再通过函数中的具体情况看是否直接传递给store

自定义拦截 action -> reducer 的过程。变为 action -> middlewares -> reducer 。这种机制可以让我们改变数据流,实现如异步 action ,action 过滤,日志输出,异常报告等功能。

具体可以参考这个连接地址:

redux中间件详解_爱吃囍囍丸子的博客-CSDN博客_redux中间件

常见的中间件

redux-thunk , redux-logger中间件

需要下载对应的包直接npm i 包名即可

store里的代码

import { applyMiddleware, createStore } from "redux"; 
import thunk from 'redux-thunk';
import { createLogger } from 'redux-logger'
// import promise from 'redux-promise'
function store(state:any,actions:any){

    if (!state){
        return {

            arr:0,
            li:[]
        }
    };
    switch(actions.type){

        case 'ADD':
            
            console.log(state.arr)
            // console.log(state);
            
            // state.li.push(1)
            state.arr+=1
            return {
                ...state
            }
            break
        case 'middleware':
            
            return{
                ...state
            }
        default:
            return state
            break
    }


}

const logger=new createLogger();


const stores= createStore(store,

    applyMiddleware(thunk,logger)    

);

export default stores

   index.tsx代码

import styles from './index.less';
import store from '../store'
import { useEffect, useState } from 'react';
//import One from './gaojie';

export default function IndexPage() {

  const [num,setnum]=useState(store.getState().arr)


  const middleBtn=(n:number)=>{
      store.dispatch(
        ()=>{
          if (n==1){
              store.dispatch({type:'ADD'})

          }else{
              console.log('不行了');
          }
        }
      );  
  }
  
  return (
    <div>

         <button onClick={middleBtn.bind(this,1)}>

            中间件
         </button>
         <button onClick={middleBtn.bind(this,2)}>

            中间件2
         </button>

    </div>
  );
}

redux-promise

redux-saga

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Z_Xshan

你的鼓励是我最大的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值