Store API 是与 Redux store 交互的核心接口。Redux store 包含应用程序的完整状态树,并提供读取状态、通过 dispatch 更新状态、监听更改以及替换 reducers 的方法。本文档涵盖了 Store API 本身的方法和行为,而不是如何创建 store(有关此内容,请参阅核心 Redux API)。
Redux store 是一个 JavaScript 对象,它包含应用程序的完整状态树。它不是一个类,只是一个具有几个方法的对象。
Store 有四个主要职责:
getState() 访问状态dispatch(action) 更新状态subscribe(listener) 注册监听器subscribe(listener) 返回的函数处理监听器的注销返回应用程序的当前状态树。它等于 store 的 reducer 返回的最后一个值。
getState() (它会抛出错误)。来源: docs/api/Store.md18-25 src/createStore.ts176-186
调度操作以触发状态更改。这是更新 Redux store 中状态的唯一方法。
Store 的 reducer 函数将使用当前状态和给定操作进行调用。reducer 的返回值将成为下一个状态,并且所有订阅者都将收到通知。
action (Object): 一个描述要进行的更改的普通对象。操作必须具有 type 属性,该属性指示正在执行的操作的类型。type 属性必须是字符串。操作对象中的任何其他属性都取决于您。type 属性的普通 JavaScript 对象。redux-thunk 等中间件。dispatch() 的行为,以支持 Promise、Observable 或其他类型的操作。来源: docs/api/Store.md31-79 src/createStore.ts280-319
添加更改监听器。每次调度操作时都会调用它,并且应用程序状态树的某些部分可能会发生更改。然后,您可以在回调中调用 getState() 来读取当前状态。
listener (Function): 每次调度操作时都会调用此回调。您应该在此回调中调用 getState() 来访问最新状态。dispatch(),但需谨慎。dispatch() 调用之前被快照。dispatch() 中多次调度时,监听器不会看到所有状态更改。dispatch() 开始之前注册的所有订阅者都将使用最新状态进行调用。subscribe() 返回的函数。来源: docs/api/Store.md84-132 src/createStore.ts211-253
替换当前用于计算状态的 reducer。
nextReducer (Function): store 要使用的下一个 reducer。ActionTypes.REPLACE 操作,以帮助填充新的状态树。来源: docs/api/Store.md138-147 src/createStore.ts330-346
Redux store 实现了一个 Observable 接口,允许它与支持此模式的库(如 RxJS)集成。
此方法返回一个状态更改的最小 Observable。您可以使用它将 Redux 与响应式编程库集成。
来源: src/types/store.ts51-62 src/createStore.ts354-390
Store enhancers 是高阶函数,它们组合 store creator 来返回一个新的、增强的 store creator。Middleware 是一种特殊的 enhancer,它允许您自定义 dispatch 方法。
Store enhancers 可以为 Redux stores 添加功能,例如:
applyMiddleware)Middleware 提供了一种在调度操作到达 reducer 之前拦截它们的机制。它通常用于日志记录、崩溃报告、处理异步操作、路由等。
Middleware 使用 applyMiddleware enhancer 应用。
来源: docs/api/applyMiddleware.md1-30 src/types/middleware.ts1-30
Redux store 维护着应用程序状态的单一事实来源。状态只能通过调度操作来修改,这使得状态更改变得可预测且可追溯。
使用 Redux Toolkit:虽然您可以直接使用 Redux store API,但建议使用 Redux Toolkit 的 configureStore,它提供了更好的默认设置。
每个应用程序只有一个 Store:Redux 设计为每个应用程序只有一个 store。使用 combineReducers 来拆分 reducer 逻辑,而不是创建多个 store。
不可变更新:切勿直接修改状态。始终从 reducers 返回新的状态对象。
可序列化的状态和操作:保持状态和操作可序列化(无函数、Promise 等),以确保可预测的行为和 DevTools 兼容性。
最小状态形状:仅在 Redux store 中存储必要的最小数据。在需要时派生数据,而不是存储冗余信息。
使用 Selectors:创建 selector 函数来从状态中提取数据,而不是直接在组件中访问它。
来源: docs/api/createStore.md79-92
对于 TypeScript 用户,Redux 为 Store API 提供了全面的类型定义。