首页 > 其他分享 >[email protected](62)[email protected](11)- 中间件2 - redux-thunk

[email protected](62)[email protected](11)- 中间件2 - redux-thunk

时间:2024-07-18 23:29:43浏览次数:11  
标签:11 const 中间件 dispatch thunk export action redux store

目录

1,介绍

一般情况下,action 是一个平面对象,并会通过纯函数来创建。

export const createAddUserAction = (user) => ({
    type: ADD_USER,
    payload: user,
});

这样是有一些限制的

  • 无法使用异步的,比如在请求接口之后再做一些操作。
  • 或根据条件,同时 dispatch 多个 action

redex-thunk 中间件的作用:允许 action 是一个函数,而不是一个平面对象。

举例

[email protected] 版本使用 [email protected] 版本。

export const createAddUserAction = (user) => ({
    type: ADD_USER,
    payload: user,
});

export const createSetLoadingAction = (isLoading) => ({
    type: SET_LOADING,
    payload: isLoading,
});

export const fetchUsers = () => {
    return async (dispatch) => {
        dispatch(createSetLoadingAction(true))
        const res = await getAllUsers();
        dispatch(createAddUserAction(res))
        dispatch(createSetLoadingAction(false))
    }
}
// 使用
import { createStore, applyMiddleware } from "redux";
import thunk from "redux-thunk";
import { fetchUsers } from "./action/userAction";

const store = createStore(reducer, applyMiddleware(thunk));
store.dispatch(fetchUsers())

这个函数有3个参数:

  1. dispatch,就是 store.dispatch
  2. getState,就是 store.getState
  3. extra,设置的额外的参数。

2,原理和实现

整体流程:

在这里插入图片描述

实现

中间件的写法参考 这篇文章

function thunkMiddleware(extra) {
    return (store) => (next) => (action) => {
        if (typeof action === "function") {
            return action(store.dispatch, store.getState, extra);
        }
        return next(action);
    };
}

const thunk = thunkMiddleware({});
thunk.withExtraArgument = thunkMiddleware;
export default thunk;

3,注意点

因为 redux-thunk 会修改 action 的类型,所以书写顺序通常会作为第一个。


以上。

标签:11,const,中间件,dispatch,thunk,export,action,redux,store
From: https://blog.csdn.net/qq_40147756/article/details/140452412

相关文章

  • 第5章 Express中间件的深入理解(一)
    中间件是Express的核心概念之一,它们可以拦截请求和响应,以便在请求到达路由处理函数之前或在响应发送给客户端之前执行某些操作。在本章中,我们将深入探讨中间件的类型、用法以及如何编写自定义中间件。1中间件概述中间件是具有访问请求对象(req)、响应对象(res)和......
  • 20240711
    T1NFLSOJP14050送外卖考虑每个双向边连通块构成一张DAG,可以想到按照拓扑序扩展每个双向边连通块,在连通块内dijkstra,然后更新所有该连通块的后继连通块。拓扑套dijkstra。T2NFLSOJP14051旅行枚举在哪个点结束,考虑此时答案的变化。T3NFLSOJP14052门把手集合异或按......
  • C++11 包装器
    前文C++11lambda表达式-CSDN博客C++11新的类功能&&可变参数模板-CSDN博客C++11右值引用和移动语义-CSDN博客function包装器1.概念        目前我们知道的可调用对象有:函数指针(类型定义太复杂),仿函数对象(要定义一个类,用的时候有点麻烦,不适合做类型统一),lam......
  • 习题3.11 表达式转换
    算术表达式有前缀表示法、中缀表示法和后缀表示法等形式。日常使用的算术表达式是采用中缀表示法,即二元运算符位于两个运算数中间。请设计程序将中缀表达式转换为后缀表达式。输入格式:输入在一行中给出不含空格的中缀表达式,可包含+、-、*、/以及左右括号(),表达式不超过20个......
  • 实验3-11 计算油费
    现在90号汽油6.95元/升、93号汽油7.44元/升、97号汽油7.93元/升。为吸引顾客,某自动加油站推出了“自助服务”和“协助服务”两个服务等级,分别可得到5%和3%的折扣。本题要求编写程序,根据输入顾客的加油量a,汽油品种b(90、93或97)和服务类型c(m-自助,e-协助),计算并输出应付款。输......
  • camke(11)配置g2o
     适配openvslam和slam14讲解代码版本1.Eigen安装(最新3.3.7)wget-qhttps://gitlab.com/libeigen/eigen/-/archive/3.3.7/eigen-3.3.7.tar.bz2tarxfeigen-3.3.7.tar.bz2rm-rfeigen-3.3.7.tar.bz2cdeigen-3.3.7mkdir-pbuild&&cdbuildcmake\-DCMAKE_BU......
  • Windows 11开始菜单变了!应用分类显示 更好找
    Windows11重新设计了开始菜单,虽然备受争议,但其实也挺好用的,只是有一个槽点,安装了太多应用软件之后,滚动列表会非常长,很难找到自己需要的。在最新的Windows1122635.3930测试版本中,微软隐藏了一个新功能,尝试重新设计开始菜单的应用列表,增加了一个“类别”(Category)模式。在这......
  • Intel和AMD用户再等等!微软确认Win11 24H2年底前登陆
    微软近日确认,Windows1124H2版本将于2024年底前正式登陆使用英特尔和AMD处理器的PC。根据微软介绍,Windows1124H2将作为传统功能更新,将在今年晚些时候提供给所有设备。此前,微软已向搭载骁龙XPlus和XElite系列处理器的Copilot+设备推送了24H2更新。该更新带来了大量AI功能,如......
  • 代码随想录算法训练营第16天|LeetCode112路径总和LeetCode113路径总和iiLeetCode106.
    代码随想录算法训练营Day16代码随想录算法训练营第16天|LeetCode112路径总和LeetCode113路径总和iiLeetCode106.从中序与后序遍历序列构造二叉树LeetCode105.从前序与中序遍历序列构造二叉树目录代码随想录算法训练营前言LeetCode112路径总和,LeetCode113路径......
  • 代码随想录算法训练营第 15 天 |LeetCode110平衡二叉树 LeetCode257二叉树的所有路径
    代码随想录算法训练营Day15代码随想录算法训练营第15天|LeetCode110平衡二叉树LeetCode257二叉树的所有路径LeetCode404左叶子之和LeetCode222完全二叉树节点之和目录代码随想录算法训练营前言LeetCode110平衡二叉树LeetCode257二叉树的所有路径LeetCode404左......