了解redux么,说一下redux?

news/2025/11/10 9:08:13/文章来源:https://www.cnblogs.com/yuhuo123/p/19205819

Redux 是一个用于 JavaScript 应用程序中管理应用状态的工具库,特别常用于 React 应用,但它并不限于 React。它为 JavaScript 应用提供了一种集中式的、可预测的状态管理方式。

Redux 的基本概念

Redux 的核心理念可以通过以下几个主要部分来解释:

单一数据源(Single Source of Truth)

Redux 的应用状态(store)被保存在一个单一的地方,通常称为 store。这个 store 是整个应用的唯一状态源。通过将所有的状态集中在一个地方,可以确保不同的组件访问和修改同一份数据,并且避免了各组件之间的数据不一致问题。

状态是只读的(State is Read-Only)

应用的状态是不可变的,意味着你不能直接修改 store 中的状态。你只能通过发送 action 来描述想要的状态变化。这使得状态的变更过程可以被更好地追踪和调试。

使用纯函数来改变状态(Changes are made with pure functions)

Redux 使用 reducer 来接收 action 并返回新的状态。reducer 是一个纯函数,意味着它不会直接修改现有的状态,而是返回一个新的状态对象。这使得 Redux 的状态管理是可预测的。

Redux 核心概念

1. Action

Action 是一个普通的 JavaScript 对象,它描述了事件发生的情况。每个 action 至少包含一个 type 属性,标识这个 action 的类型。Action 是数据载体,用来传递应用的行为(例如用户点击了某个按钮,或者数据加载完成)。

const action = {type: 'ADD_TODO',payload: 'Learn Redux'
};
2. Reducer

Reducer 是一个函数,接受当前的状态和一个 action,并返回一个新的状态。Reducer 的核心是它是纯函数:对于相同的输入,总是返回相同的输出,并且不会有副作用。

const initialState = {todos: []
};function todoReducer(state = initialState, action) {switch (action.type) {case 'ADD_TODO':return {...state,todos: [...state.todos, action.payload]};default:return state;}
}
3. Store

Store 是存储状态的地方。Redux 应用只有一个 store,它包含了整个应用的状态。你通过 store.dispatch(action) 来触发状态的变化,并通过 store.getState() 获取当前的状态。

const store = createStore(todoReducer);store.dispatch({ type: 'ADD_TODO', payload: 'Learn Redux' });console.log(store.getState()); // { todos: ['Learn Redux'] }
4. Dispatch

dispatch 是一个方法,用来发送 actions 到 store 以触发状态的更新。每个 action 都会被发送到 reducer 中进行处理。

store.dispatch({ type: 'ADD_TODO', payload: 'Learn Redux' });
5. Selectors

Selectors 是用于从 Redux store 中获取部分状态的函数。它们允许你在不直接修改 store 的情况下选择并派发数据。

const getTodos = (state) => state.todos;const state = store.getState();
const todos = getTodos(state); // ['Learn Redux']

Redux 工作流

  1. State 初始化:应用启动时,Redux store 中会有一个初始的状态对象,通常由一个或多个 reducer 来管理。

  2. 发送 Action:用户的操作(比如点击按钮、表单提交等)会触发一个 action,这个 action 描述了希望如何更新 state。

  3. Reducer 处理:Action 被发送到 reducer,reducer 根据 action 的类型来决定如何改变 state。

  4. 更新 Store:reducer 返回一个新的 state,Redux 将这个新的 state 存储到 store 中。

  5. UI 更新:UI 会根据 store 中的状态重新渲染。通常,React 会在状态变化时重新渲染组件,确保 UI 始终与最新的 state 保持同步。

使用 Redux 的优势

  • 可预测性:由于 reducer 是纯函数,状态的变化是可预测的。给定相同的输入,reducer 总是返回相同的输出。

  • 集中管理状态:所有的应用状态都集中存储在 Redux store 中,减少了跨组件的数据传递和管理。

  • 时间旅行调试:由于状态是通过 action 和 reducer 变化的,可以使用 Redux DevTools 等工具来回溯和调试应用的状态变化(时间旅行)。

  • 跨组件共享状态:Redux 是全局状态管理工具,可以方便地在多个组件之间共享状态,而不需要通过 props 或事件传递。

Redux 的缺点

尽管 Redux 很强大,但它也有一些缺点:

  • 学习曲线:对于初学者来说,理解 Redux 中的概念如 action、reducer、store 等可能有点复杂,尤其是与 React、JSX 和其他现代前端工具结合使用时。

  • 冗长的样板代码:使用 Redux 可能需要写很多样板代码,尤其是在小型应用程序中,这些代码可能显得冗余。

  • 性能问题:对于某些大型应用,Redux 可能会因为频繁的状态更新和渲染导致性能问题,尽管这可以通过技术(如 memoization、选择器等)来优化。

Redux 与 React

虽然 Redux 主要是与 React 一起使用的,但它并不局限于 React。它可以与任何 JavaScript 库或框架一起使用。React Redux 是 React 中集成 Redux 的库,简化了状态管理和组件之间的状态共享。

Redux 中的中间件

Redux 支持中间件,这使得你能够在 action 被发送到 reducer 之前做一些额外的处理。例如,Redux 的异步操作通常通过中间件(如 redux-thunk 或 redux-saga)来处理,这使得 action 可以返回一个函数或生成器,而不是仅仅返回一个对象。

总结

Redux 提供了一种简单、可预测的状态管理方式,适合于大型应用和需要共享状态的复杂应用。通过统一管理应用的所有状态,Redux 可以提高可维护性和调试性,但同时也可能增加代码复杂度。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/960958.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

HelloAgent零基础入门学习笔记 - yi

HelloAgent零基础入门学习笔记最近我开始了对HelloAgent的学习,由于基础比较薄弱,正想系统学习智能体系统的原理与实践。恰逢Datawhale官方举办了组队学习计划,专门针对智能体系统进行系统教学,我便毫不犹豫地报名…

Linux IOWait 深度解析

Linux IOWait 深度解析在 Linux 系统性能监控中,IOWait(CPU 等待 I/O 完成的时间占比)常被当作判断 I/O 瓶颈的 “直观指标”。但实际运维场景中,高 IOWait 未必代表 I/O 过载,低 IOWait 也可能隐藏着严重的 I/O …

2025年知名的昆明泡沫箱厂家推荐及采购指南

2025年知名的昆明泡沫箱厂家推荐及采购指南 行业背景与市场趋势 泡沫箱作为一种轻便、隔热、防震的包装材料,广泛应用于食品、医药、物流等领域。随着生鲜电商、冷链物流的快速发展,泡沫箱市场需求持续增长。据中国…

React-Flow中文文档正式上线 - 指南

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

P14460 【MX-S10-T1】『FeOI-4』寻雾启示 题解

P14460 【MX-S10-T1】『FeOI-4』寻雾启示 题解已严肃完成今日大学习——被大爬打趴P14460 【MX-S10-T1】『FeOI-4』寻雾启示 题解 题目链接 我的博客 思路 这道题一看眼就是一个DP。 设 \(dp_i\) 表示走到 \(d=i\) 时需…

分治+快速幂(p1010)

P1010 [NOIP 1998 普及组] 幂次方 题目描述 任何一个正整数都可以用 \(2\) 的幂次方表示。例如 $137=27+23+2^0 $。 同时约定次方用括号来表示,即 \(a^b\) 可表示为 \(a(b)\)。 由此可知,\(137\) 可表示为 \(2(7)+2(…

深入解析:一文入门Rust语言

深入解析:一文入门Rust语言pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco",…

Studio 3T 2025.20 (macOS, Linux, Windows) - MongoDB 的终极 GUI、IDE 和 客户端

Studio 3T 2025.20 (macOS, Linux, Windows) - MongoDB 的终极 GUI、IDE 和 客户端Studio 3T 2025.20 (macOS, Linux, Windows) - MongoDB 的终极 GUI、IDE 和 客户端 The Ultimate GUI, IDE and client for MongoDB 请…

P11089 [ROI 2021] 手机游戏 (Day 1) 笔记

实则是模拟赛 #35 T4,但是模拟赛笔记已经太懒断更一个月了。 常见贪心:找到每个位置无法删掉的最右位置 \(R_i\),单调栈解决。 此时,每个位置都可以保留 \((i,R_i]\) 中的任意一个位置 \(j\),并跳到 \(j\) 处开始…

实用指南:GESP2025年9月认证C++四级( 第三部分编程题(1)排兵布阵)

实用指南:GESP2025年9月认证C++四级( 第三部分编程题(1)排兵布阵)pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: &q…

完整教程:Transformer模型深度解析:从原理到谷歌级代码审查实战

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

上周热点回顾(11.3

热点随笔: 没有 AI,没有融资,一个 17K Star 开源项目的真实收入 (NocoBase) Microsoft Agent Framework 接入DeepSeek的优雅姿势 (寻仙不辞远) 我发现很多程序员都不会打日志。。。 (程序员鱼…

RediSearch从入门到生产级实战:全文搜索的“Redis原生解”

一、RediSearch是什么?——Redis的“全文搜索引擎” RediSearch是Redis官方推出的内存全文搜索模块(用C语言编写),通过Redis Module机制集成到Redis中,完美解决Redis原生不支持全文搜索的痛点。 它的核心价值:兼…

前后端代码自动生成探索

前后端联调 由于前后端的编程语言不同,框架体系也会因此不同,所以有了openapi的RESTful标准。一般都是从后端同步到前端axios(不会有前端到后端的生成工具) swagger.json → axios.tsopenapi-generator -g typescr…

实用指南:JavaScript Reference Type解读

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

基于Java开发的大学社团管理系统源码+运行步骤

功能介绍 平台采用B/S结构,后端采用主流的Springboot框架进行开发,前端采用主流的Vue.js进行开发。这是一个前后端分离的项目,需要提前学习相关技术。努力吧少年 整个平台包括前台和后台两个部分。前台功能包括:首…

智能体详解——极简深度研究Agent

深度研究是各大AI平台都比较比较常见的智能体,无论是国外的OpenAI、Google或是国内的Kimi、阿里等都提供了此功能。只需要通过输入想要研究探索的主题该智能体就会自动通过网络检索、调用工具等抓取与用户关心的该主题…

大模型法律知识评估——Qwen3-0.6B到8B vs LawLLM-7B

现在无论是数码产品手机、电脑、CPU、GPU等或是大模型跑分是一个永恒不变的流程,虽然现在不少厂商针对跑分进行了专门的“优化”,但跑分目前还是相对客观评价一个硬件产品或是软件产品的手段。 不服? 来跑个分。 跑…

C 数组

由于数组有存储多个相同类型值的能力,我们能够做更多有趣的事情。首先我们要了解数组,然后再聊一聊数组可以做什么。 数组的声明和初始化 数组类型形式如右侧:数据类型 数组名[数组大小]={值1,值2,值3,...}; 比如下…

网络层-IP内容报涉及到的两张表:路由表&ARP表

网络层-IP内容报涉及到的两张表:路由表&ARP表2025-11-10 08:17 tlnshuju 阅读(0) 评论(0) 收藏 举报pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display:…