2026-05-03 00:28:12
Redux 是 JavaScript 状态容器,提供可预测化的状态管理。其核心观点如下:
每个 state 变化可预测。
动作与状态统一管理。
MobX:适合简单项目,数据不复杂的应用。
Redux:适合大型项目,有回溯需求的项目。
都是状态管理库。
都从 Flux 中衍生而来,具有单一数据源和单向数据流的特点。
适用范围:Redux 是泛用的实现,也可用于 Vue 中,但契合度不如 Vuex。Vuex 中引入 module 可把 store 划分成多个单元。
优点:
体积小:实现方式简单,代码不到 20 行。
使用简单:没有引入额外范式,上手容易。
缺点:
耦合严重:异步操作与 redux 的 action 耦合在一起,不方便管理。
功能弱:常用功能需自己封装。
异步解耦:异步操作转移到单独的 saga.js 中,不掺杂在 action.js 或 component.js 中。
异常处理:受益于 generator function 的 saga 实现,可通过 try/catch 语法捕获处理代码异常和请求失败。
功能强大:提供大量 saga 辅助函数和 Effect 创建器供开发者使用。
灵活:可串行或并行组合多个 saga,形成实用的异步 flow。
易测试:提供各种 case 的测试方案,包括 mock task、分支覆盖等。
优点:功能最强,背靠 rxjs 这个强大的响应式编程库,几乎可做任何能想到的异步处理。
缺点:学习成本奇高,若不会 rxjs,则需额外学习两个复杂的库。
Redux 提供了类似后端 express 中间件的概念,目的是提供第三方插件的模式。
未使用 redux:action -> reducer。
使用 redux:自定义拦截,变成 action -> middlewares -> reducer。
Redux 中的 connect 方法主要将 UI 组件生成容器组件,即把 UI 组件和 Redux 连接起来。示例代码如下:
const VisibleTodoList=connet( mapStateToProps, //参数 mapDispatchToProps //处理方法)(TodoList)解释一下 Flux 思想Flux 是一种强制单向数据流的架构模式。它控制派生数据,使用具有所有数据权限的中心 store 实现多个组件之间的通信,整个应用中的数据更新只能在此处进行,为应用提供稳定性并减少运行时错误。
Redux 遵循的特点Redux 是 flux 思想(单向数据流,store 唯一数据源)的一种实现,并在此基础上做了改进。区别如下:
Redux:单个。
Flux:多个。
为了解决跨浏览器的兼容性问题,SyntheticEvent 实例会被传递给事件处理函数。SyntheticEvent 是 React 跨浏览器的浏览器原生事件包装器,拥有和浏览器原生事件相同的接口,包括 stopPropagation() 和 preventDefault()。React 并不将事件附加到子节点本身,而是使用单个事件侦听器侦听顶层的所有事件,这对性能有好处,也意味着 React 在更新 DOM 时不需要跟踪事件监听器。
react-redux 的实现原理react-redux 提供两个 API:
包装原组件:将 state、action 通过 props 的方式传入到原组件内部。
监听 store tree 变化:使包装的原组件可以响应 state 的变化。
