当前位置: 首页 > news >正文

Redux与Redux-thunk详解

Redux与Redux-Thunk中间件的工作原理是Redux状态管理库中的核心概念,它们共同协作以实现复杂应用中的状态管理和异步操作。以下是它们的工作原理的详细解释:

Redux的工作原理

  1. Action
    • Action是Redux中的基本单位,它是一个描述要执行什么操作的纯JavaScript对象。
    • 每个Action都有一个type属性,该属性是一个字符串,用于唯一标识Action的类型。
    • Action还可以包含其他属性,这些属性携带了执行操作所需的数据。
  2. Reducer
    • Reducer是一个纯函数,它接收当前的state和一个Action作为参数,并返回一个新的state。
    • Reducer描述了state如何根据Action进行变化。
    • 在Redux中,你可以有多个Reducer,它们可以组合在一起,形成一个更大的Reducer函数,以管理应用中的整个state树。
  3. Store
    • Store是Redux的核心,它持有应用的整个state树。
    • Store有三个主要方法:getState()dispatch(action)subscribe(listener)
    • getState()方法返回当前的state。
    • dispatch(action)方法用于发送Action到Reducer,以更新state。
    • subscribe(listener)方法允许你注册一个监听器,以便在state发生变化时接收通知。
  4. Dispatch和Action Flow
    • 当你调用store.dispatch(action)时,Redux会将这个Action发送到当前配置的Reducer。
    • Reducer根据Action的type和其他属性来计算新的state。
    • 然后,Redux会通知所有注册的监听器,state已经更新。
Redux的工作流程
  1. 组件通过调用store.dispatch方法派发一个action。
  2. Store接收到action后,将其传递给reducer。
  3. Reducer根据action的type属性和当前状态,计算出新的状态,并返回给Store。
  4. Store将新的状态保存到状态树中,并通知所有订阅了状态变化的组件。
  5. 组件根据新的状态重新渲染。
Redux数据流
  • 组件派发action给Store。
  • Store将action传递给Reducer。
  • Reducer计算新的状态并返回给Store。
  • Store更新状态树,并通知所有订阅了状态变化的组件。
  • 组件根据新的状态重新渲染。

Redux-Thunk中间件的工作原理

Redux-Thunk是一个Redux中间件,它允许action creators返回函数而不是仅仅返回action对象。这使得处理异步操作变得容易。

  1. 中间件的概念
    • Redux中间件是一种用于扩展Redux功能的机制。
    • 它允许你在action被派发到reducer之前或之后执行一些额外的操作。
    • 中间件通常由一个函数构成,该函数返回一个函数。这个返回的函数接受store.dispatchstore.getState等参数,然后返回一个新的dispatch函数。
const fetchFoodsList = () => {  return async (dispatch) => {  // 编写异步逻辑  const res = await axios.get('http://localhost:3004/takeaway')  // 调用dispatch函数提交action  dispatch(setFoodsList(res.data))  }  
}——————————————————————————————————————————————————————————————————————————————————
import React, { useEffect } from 'react';  
import { useDispatch, useSelector } from 'react-redux';  
import { fetchFoodsList } from './actions'; // 假设actions.js是你的action creators文件  const FoodsComponent = () => {  const dispatch = useDispatch();  const foodsList = useSelector(state => state.foodsList); // 假设你的state结构中有foodsList  useEffect(() => {  dispatch(fetchFoodsList());  }, [dispatch]);  return (  <div>  {/* 渲染foodsList */}  </div>  );  
}
  1. Redux-Thunk的工作流程
    • 当你使用Redux-Thunk中间件时,如果dispatch一个函数(而不是一个普通的action对象),Redux-Thunk会拦截这个函数。
    • 这个函数接收两个参数:dispatchgetStatedispatch用于在异步操作完成后发送action,getState用于获取当前的state。
    • 你可以在这个函数内部执行异步操作,如发起网络请求或定时器操作。
    • 异步操作完成后,你可以使用dispatch方法发送一个新的action,以更新Redux store中的状态。
  2. 使用Redux-Thunk
    • 要在Redux应用中使用Redux-Thunk中间件,你需要在创建store时将其应用到store上。
    • 这通常是通过applyMiddleware函数来实现的。

综上所述,Redux提供了状态管理的核心机制,而Redux-Thunk中间件则扩展了Redux的功能,使其能够轻松处理异步操作。通过结合使用这两个工具,你可以构建出功能强大且易于维护的Redux应用。

 


http://www.mrgr.cn/news/52572.html

相关文章:

  • CMake变量作用域
  • 从零开始的LeetCode刷题日记:199. 二叉树的右视图
  • 极氪7X路上能见度越来越高,就连小猎豹都被折服成为第10000号车主
  • openpose二维骨架搭建介绍及代码撰写详解(总结4)
  • 【python实操】python小程序之TestSuite和TestRunner
  • C语言二维数组的遍历 Java的强制转换和隐形转换
  • 人脸识别之疲劳检测
  • 集合框架11:泛型集合
  • 忙碌的工作和生活,地平线8号探界者商务背包伴左右
  • 【CAN 应用编程】SocketCan实战
  • Halcon基础-二维码识别
  • Java:类和对象
  • 【前端】Matter:基础概念与入门
  • 双指针 — 复写零
  • Java集合(2 :List)
  • 【工具变量】上市公司当年是否发生财务重述指标整理Stata代码(2000-2023年)
  • 【即见未来,为何不拜】聊聊分布式系统中的故障监测机制——Phi Accrual failure detector
  • [0633].第3-3节:@SentinueResource注解
  • nequip代码
  • 第二十三节 视频处理与保存