Repolode
reduxjs

reduxjs/reselect

一个用于创建记忆化 selector 函数的 TypeScript 库,常配合 Redux 从状态中派生数据。

Star
19,005
Fork
666
未关闭 Issue
38
最近提交
24小时前

这是什么?

Reselect 提供 createSelector,用于构建带记忆化的 selector 函数。你传入一个或多个从状态中取值的 input selector,再提供一个 result function 基于这些值计算派生数据。只有当提取的输入发生变化时,output selector 才会重新计算;输入未变时则返回同一个引用。

这样 Redux 只需保存最少的状态,派生数据按需计算。selector 还可以相互组合,一个 selector 的输出可以作为另一个的输入。Reselect 已内置于 Redux Toolkit,也可以作为独立的 reselect 包安装。

库中提供 weakMapMemoize、lruMemoize、createSelectorCreator 等记忆化方案用于定制行为,并提供仅在开发环境下生效的输入稳定性和恒等函数检查。

核心功能

  • 01创建记忆化 selector,输入未变时跳过重新计算。
  • 02支持把其他 selector 作为输入进行组合。
  • 03返回稳定的结果引用,有助于 React-Redux 和 React 避免不必要的重渲染。
  • 04提供 createStructuredSelector,可由一组 selector 构建对象型 selector。
  • 05通过 createSelectorCreator、lruMemoize、weakMapMemoize 支持自定义记忆化策略。
  • 06提供仅开发环境生效的检查,用于发现不稳定的 input selector 和恒等 result function。

适用场景

  • 从 Redux 状态中派生过滤或聚合数据,避免冗余存储。
  • 通过 React-Redux 向 React 组件传递 props,同时减少不必要的重渲染。
  • 将小型状态查询组合为分层 selector,构建更复杂的派生视图。
  • 对 Redux 之外的普通不可变 JavaScript 数据使用记忆化派生计算。

快速上手

  1. 1

    使用 npm 安装独立包

    npm install reselect
  2. 2

    或者使用已内置 Reselect 的 Redux Toolkit(无需额外安装)

标签

常见问题

reselect 是什么?
一个用于创建记忆化 selector 函数的 TypeScript 库,常配合 Redux 从状态中派生数据。 Reselect 提供 createSelector,用于构建带记忆化的 selector 函数。你传入一个或多个从状态中取值的 input selector,再提供一个 result function 基于这些值计算派生数据。只有当提取的输入发生变化时,output selector 才会重新计算;输入未变时则返回同一个引用。
reselect 可以免费使用吗?用的什么许可证?
reselect 以 MIT 许可证开源。用于商业产品前,请先确认许可证条款。
reselect 还在维护吗?
活跃维护中。reselect 最近一次提交是在 2026年10月21日。
reselect 适合用来做什么?
从 Redux 状态中派生过滤或聚合数据,避免冗余存储。 通过 React-Redux 向 React 组件传递 props,同时减少不必要的重渲染。 将小型状态查询组合为分层 selector,构建更复杂的派生视图。 对 Redux 之外的普通不可变 JavaScript 数据使用记忆化派生计算。
reselect 怎么安装和运行?
使用 npm 安装独立包: npm install reselect 或者使用已内置 Reselect 的 Redux Toolkit(无需额外安装)
在哪里获取 reselect?
源代码和安装说明在 GitHub 上:https://github.com/reduxjs/reselect

概要由 AI 根据项目 README 生成;GitHub 数据每日更新。

相关项目