redux的原理及其与react-redux的区别

202 阅读4分钟

介绍

Redux 是一个 JavaScript 库,用于管理应用程序的状态。它主要用于与 React 一起使用,但也可以与其他 JavaScript 框架或库一起使用。Redux 的设计思想是将应用程序的状态管理集中化,以便在复杂的应用程序中更好地组织和管理状态。

Redux 的核心原理可以归纳为以下几个部分:

  1. 单一数据源(Single Source of Truth) : Redux 使用一个单一的、不可变的状态树(store)来保存应用程序的所有状态。这意味着整个应用程序的状态都集中在一个地方,方便管理和调试。

  2. 状态是只读的(State is Read-Only) :Redux 的状态树是只读的。这意味着状态不能直接被修改。唯一改变状态的方法是通过派发(dispatch)动作(action)。

  3. 纯函数(Pure Functions) :状态的更新是通过一个称为 reducer 的纯函数来完成的。reducer 接受当前的状态和一个动作作为参数,并返回一个新的状态。由于 reducer 是纯函数,它不修改输入的状态,而是返回一个新的状态对象。

  4. 动作(Actions) :动作是一个普通的 JavaScript 对象,用于描述要发生的事件。每个动作都有一个 type 属性来指示事件类型,可能还会包含其他数据。动作是更新状态的唯一方式。

  5. 派发(Dispatch) :当应用程序需要更新状态时,会通过 dispatch 函数来派发一个动作。Redux 的 store 会接收到这个动作,并将其传递给所有的 reducers,以便计算出新的状态。

  6. 中间件(Middleware) :Redux 支持中间件,用于处理复杂的异步逻辑或副作用。中间件可以在动作被送到 reducer 之前对动作进行处理。例如,redux-thunk 或 redux-saga 是常见的中间件库,它们帮助处理异步操作。

  7. 订阅(Subscription) :组件或其他部分可以订阅 store 的变化。当 store 的状态发生变化时,订阅者会收到通知并可以相应地更新自己的状态或界面。

总结一下,Redux 的基本工作流程如下:

  1. 组件通过 dispatch 函数发送一个动作(action)。
  2. Redux 的 store 接收到这个动作,并将其传递给 reducer。
  3. reducer 根据当前的状态和动作,计算出新的状态。
  4. Redux store 更新状态,并通知所有订阅者。
  5. 组件或其他订阅者接收到更新,并重新渲染或做出其他反应。

image.png

ReduxReact-Redux 是两个紧密相关但不同的库,它们在处理应用状态时扮演着不同的角色。下面是它们之间的主要区别:

Redux

  1. 定义:Redux 是一个状态管理库,提供了一个集中式的存储(store)来管理应用的状态
  2. 功能
  • 单一数据源:所有的应用状态都集中在一个 store 中。
  • 状态不可变:状态是只读的,通过 reducer 函数来处理状态的变化。
  • 纯函数:reducer 是纯函数,它根据当前状态和动作计算出新的状态。
  • 动作和派发:应用通过派发动作来触发状态变化。
  1. 用途:Redux 主要关注于状态的管理和维护,它并不直接处理 UI 的渲染或与 UI 组件的交互。

React-Redux

  1. 定义:React-Redux 是一个用于将 Redux 状态管理库与 React 框架结合的库。它提供了一些工具和 API,使得在 React 组件中使用 Redux 变得更加方便
  2. 功能
  • Provider<Provider> 组件使得 Redux store 对整个 React 应用程序的组件树可用。它将 Redux store 传递给组件树中的所有子组件。
  • connectconnect 函数用于将 Redux store 的状态和 dispatch 方法映射到 React 组件的 props 上,使得组件能够访问 Redux store 并触发动作。
  • Hooks:React-Redux 提供了 useSelectoruseDispatch 等 Hooks,使得函数组件能够更加简洁地访问 Redux store 和派发动作。
  1. 用途
  • React-Redux 主要处理 React 组件与 Redux store 的连接,使得 React 组件能够访问和更新 Redux store 的状态。
  • 它简化了在 React 中使用 Redux 的过程,特别是在函数组件中使用 Hooks 的场景下

区别总结

  • Redux 是核心的状态管理库,处理应用程序状态的集中管理、更新和读取
  • React-Redux 是一个辅助库,提供了将 Redux 和 React 结合的工具,使得在 React 组件中使用 Redux 状态变得更加便捷

在实际使用中,Redux 用于定义和管理状态的逻辑,而 React-Redux 则用于将这些状态和逻辑集成到 React 组件中。