React-Redux-thunk实现原理

简介: React-Redux-thunk实现原理

前言


React-Redux-Thunk是一个用于处理Redux异步操作的中间件,它的实现原理基于Redux middleware的概念。它的核心思想是允许action creators返回函数而不是普通的action对象。


本篇的内容也是基于上次实现 Redux 实现原理的文章进行改造的,在 redux-thunk 中,如果通过 dispatch 派发的任务是一个对象, 那么就立即执行 reducer, 如果通过 dispatch 派发的任务是一个函数, 那么就执行这个函数,实现这一步该如何实现呢,其实呢非常的简单。


更改 index.js:

const redux = require('redux');
const ADD_COUNT = 'ADD_COUNT';
const SUB_COUNT = 'SUB_COUNT';
// 定义一个状态
let initialState = {
    count: 0
};
// 利用store来保存状态(state)
const store = redux.createStore(reducer);
// 利用action来修改状态
const addAction = {type: ADD_COUNT, num: 1}
const subAction = {type: SUB_COUNT, num: 1};
const getUserInfo = (dispatch, getState) => {
    setTimeout(() => {
        console.log('获取到了异步数据');
        dispatch(addAction);
    }, 3000);
};
// 利用reducer将store和action串联起来
function reducer(state = initialState, action) {
    console.log('reducer被执行了');
    switch (action.type) {
        case ADD_COUNT:
            return {count: state.count + action.num};
        case SUB_COUNT:
            return {count: state.count - action.num};
        default:
            return state;
    }
}
function thunkDispatch(action) {
    console.log('执行reducer之前做的事情');
    if (typeof action === 'function') {
        action(store.dispatch, store.getState);
        return;
    }
    store.dispatch(action);
}
thunkDispatch(getUserInfo);

运行效果如下:


如上的实现代码与官方的还是有些差异的因为官方是通过 dispatch 来进行派发任务的,而我们并不是所以下方我将进一步的进行完善一下,那么更改的具体内容呢就是 thunkDispatch:

function thunkDispatch(store) {
    const storeDispatch = store.dispatch;
    const storeGteState = store.getState;
    function myDispatch(action) {
        console.log('执行reducer之前做的事情');
        if (typeof action === 'function') {
            action(storeDispatch, storeGteState);
            return;
        }
        storeDispatch(action);
    }
    // 将官方的dispatch函数修改为我们自定义的dispatch函数
    store.dispatch = myDispatch;
}


测试:

// 调用的实际是我们自定义的dispatch函数
thunkDispatch(store);
store.dispatch(getUserInfo);

好了到此为止,现在我们的实现代码就与官方的一模一样了,end。




最后

本期结束咱们下次再见👋~

🌊 关注我不迷路,如果本篇文章对你有所帮助,或者你有什么疑问,欢迎在评论区留言,我一般看到都会回复的。大家点赞支持一下哟~ 💗

相关文章
|
6月前
|
算法 前端开发 JavaScript
React的diff算法原理
React的diff算法原理
126 0
|
6月前
|
JSON 缓存 前端开发
【React】React原理面试题集锦
本文集合一些React的原理面试题,方便读者以后面试查漏补缺。作者给出自认为可以让面试官满意的简易答案,如果想要了解更深刻,可以点击链接查看对应的详细博文。在此对链接中的博文作者非常感谢🙏。
131 0
|
1月前
|
存储 前端开发 测试技术
React Hooks 的工作原理
【10月更文挑战第1天】
|
2月前
|
移动开发 前端开发 应用服务中间件
React两种路由模式的实现原理
React两种路由模式的实现原理
85 3
|
3月前
|
前端开发 算法 JavaScript
React原理之Diff算法
【8月更文挑战第24天】
|
3月前
|
存储 JavaScript 前端开发
react redux 实现原理
【8月更文挑战第29天】react redux 实现原理
25 4
|
3月前
|
前端开发 JavaScript 算法
如何学习react原理
【8月更文挑战第9天】 如何学习react原理
45 6
|
3月前
|
移动开发 前端开发 JavaScript
react路由实现原理
【8月更文挑战第11天】react路由实现原理
42 1
|
3月前
|
开发者 安全 UED
JSF事件监听器:解锁动态界面的秘密武器,你真的知道如何驾驭它吗?
【8月更文挑战第31天】在构建动态用户界面时,事件监听器是实现组件间通信和响应用户操作的关键机制。JavaServer Faces (JSF) 提供了完整的事件模型,通过自定义事件监听器扩展组件行为。本文详细介绍如何在 JSF 应用中创建和使用事件监听器,提升应用的交互性和响应能力。
37 0
|
3月前
|
前端开发 Java UED
瞬间变身高手!JSF 与 Ajax 强强联手,打造极致用户体验的富客户端应用,让你的应用焕然一新!
【8月更文挑战第31天】JavaServer Faces (JSF) 是 Java EE 标准的一部分,常用于构建企业级 Web 应用。传统 JSF 应用采用全页面刷新方式,可能影响用户体验。通过集成 Ajax 技术,可以显著提升应用的响应速度和交互性。本文详细介绍如何在 JSF 应用中使用 Ajax 构建富客户端应用,并通过具体示例展示 Ajax 在 JSF 中的应用。首先,确保安装 JDK 和支持 Java EE 的应用服务器(如 Apache Tomcat 或 WildFly)。
44 0