redux中间件之redux-thunk

最近在初学redux,也接着学了redux里的中间件。
对于redux,本来 store.dispatch 只能派发的是一个对象给store。
加了 redux 中间件后:其实是对 store.dispatch 方法做了升级;升级后可接收对象,也可接收函数,使得可处理异步代码了

如果派发的的是对象,则中间件会直接传给store;如果派发的是函数的话,则会先执行这个函数

在这里插入图片描述
注意:这里的中间件指的是 storeaction 的中间

常见的 redux 中间件 :redux-thunk 和 redux-saga 都是处理异步的
前者是通过把异步代码放在action里,后者是把异步代码单独放在一个文件里
先将 redux-thunk 中间件

Redux-thunk

Redux-thunk思想: 异步请求放到action里

安装

npm install redux-thunk

引入:

在创建store的地方引入这个中间件
即在store目录下的 index.js 引入react 的 applyMiddleware 和 redux-thunk,
然后在用 createStore () 方法中,设第二个参数:通过 applyMiddleware ()方法使用 redux-thunk 这个中间件

//栗子
import {createStore, applyMiddleware} from 'redux'
import reducer from './reducer.js'
import thunk from 'redux-thunk'

export default createStore(
    reducer,
    applyMiddleware(thunk)
    );

注:Chrome插件也是属于中间件, 如果也想扩展 redux-devtools (也原本是放createStore第二个参数) 因为多使用了一些中间件,比如 redux-thunk 后,则createStore()的第二个参数的 applyMiddleware() 不能是redux-devtools 扩展Chrome插件的那些代码了

若既想要使用 redux-devtools 这个 Chrome 扩展插件,又想使用中间件的话
怎么办:GitHub 的 redux-devtools-extension 提供了解决方法
https://github.com/zalmoxisus/redux-devtools-extension

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

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

使用: 在action中使用redux-thunk

本来 action/ actionCreateor.js 应该返回的是对象,使用了redux-thunk 后则也可return 返回一个函数了,在这个函数里去写异步代码(如ajax请求)
由于 action 此时是函数了,所以 react 会去执行这个函数;
在这个函数里如果想把数据更新到 store 上的话,又是同样的 store.dispatch (一个action),不过由于此时这个return 返回的函数接收到的参数就是store.dispatch方法,则可直接dispatch(action对象)

// 栗子
// 组件里
componentDidMount(){
    const action = getTodolist();
    store.dispatch(action)
}
 
 
 
// actionCreateor.js文件
export const initListAction =(data)=>({
    type: INIE_TODOLIST,
    value: data
})
 
export const getTodolist =()=>{
    return (dispatch)=>{
            axios.get('./list.json').then((res)=> {
                const data = res.data;
                const action = initListAction(data);
                dispatch(action)
            })
        }
    }
 
 
// reducer.js 文件里
export const initListAction =(data)=>({
    type: INIE_TODOLIST,
    value: data
})
 

我的总结思路:
store.dispatch 一个函数,这个函数返回的也是函数A,
在这个返回的函数A里写的是异步的代码,和进一步的真正的action事件的派发(第二次store.dispatch(),且派发的这个对象的数据就是来自异步后的数据)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
本项目是一个基于SpringBoot开发的华府便利店信息管理系统,使用了Vue和MySQL作为前端框架和数据库。该系统主要针对计算机相关专业的正在做毕设的学生和需要项目实战练习的Java学习者,包含项目源码、数据库脚本、项目说明等,有论文参考,可以直接作为毕设使用。 后台框架采用SpringBoot,数据库使用MySQL,开发环境为JDK、IDEA、Tomcat。项目经过严格调试,确保可以运行。如果基础还行,可以在代码基础之上进行改动以实现更多功能。 该系统的功能主要包括商品管理、订单管理、用户管理等模块。在商品管理模块中,可以添加、修改、删除商品信息;在订单管理模块中,可以查看订单详情、处理订单状态;在用户管理模块中,可以注册、登录、修改个人信息等。此外,系统还提供了数据统计功能,可以对销售数据进行统计和分析。 技术实现方面,前端采用Vue框架进行开发,后端使用SpringBoot框架搭建服务端应用。数据库采用MySQL进行数据存储和管理。整个系统通过前后端分离的方式实现,提高了系统的可维护性和可扩展性。同时,系统还采用了一些流行的技术和工具,如MyBatis、JPA等进行数据访问和操作,以及Maven进行项目管理和构建。 总之,本系统是一个基于SpringBoot开发的华府便利店信息管理系统,使用了Vue和MySQL作为前端框架和数据库。系统经过严格调试,确保可以运行。如果基础还行,可以在代码基础之上进行改动以实现更多功能。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值