@ariakit/store

中文文档
0.1.11发布于 2026/10/14MITTypeScriptES Module构建来源已验证近 30 天下载 343.7万

Ariakit 商店公用事业

中文使用文档
文档目录19 节
  1. 目录
  2. 安装
  3. 使用量
  4. API 参考
  5. createStore
  6. setup
  7. init
  8. subscribe
  9. sync
  10. batch
  11. omit
  12. pick
  13. mergeStore
  14. throwOnConflictingProps
  15. State
  16. StoreOptions
  17. StoreProps
  18. StoreState
  19. Store

@ ariakit/ 仓库

重要内容: 这个软件包是实验性的,并不遵循语义化的版本,意思是断裂变化可能发生在补丁和小版本中.

Ariakit软件包所使用的框架-不可知存储原始.

目录

安装

npm i @ariakit/store

使用量

从软件包根导入商店助手 :

import { createStore } from "@ariakit/store";

这一一揽子方案只采用无害环境管理,并暴露出单一的公众切入点.

API 参考

createStore

function createStore<S extends State>(
  initialState: S,
  ...stores: Array<Store<Partial<S>> | undefined>
): Store<S>;

创建商店.

setup

type StoreSetup = (callback: () => void | (() => void)) => () => void;

function setup<T extends Store>(
  store?: T | null,
  ...args: Parameters<StoreSetup>
): T extends Store ? ReturnType<StoreSetup> : void;

注册一个在商店初始化时称为回调函数.

init

type StoreInit = () => () => void;

function init<T extends Store>(
  store?: T | null,
  ...args: Parameters<StoreInit>
): T extends Store ? ReturnType<StoreInit> : void;

当商店初始化时应该调用的函数 .

subscribe

type Listener<S> = (state: S, prevState: S) => void | (() => void);

type Sync<S, K extends keyof S> = (
  keys: K[] | null,
  listener: Listener<Pick<S, K>>,
) => () => void;

type StoreSubscribe<S = State, K extends keyof S = keyof S> = Sync<S, K>;

function subscribe<T extends Store, K extends keyof StoreState<T>>(
  store?: T | null,
  ...args: Parameters<StoreSubscribe<StoreState<T>, K>>
): T extends Store ? ReturnType<StoreSubscribe<StoreState<T>, K>> : void;

注册一个在商店中状态变化后称为听众函数 .

sync

type Listener<S> = (state: S, prevState: S) => void | (() => void);

type Sync<S, K extends keyof S> = (
  keys: K[] | null,
  listener: Listener<Pick<S, K>>,
) => () => void;

type StoreSync<S = State, K extends keyof S = keyof S> = Sync<S, K>;

function sync<T extends Store, K extends keyof StoreState<T>>(
  store?: T | null,
  ...args: Parameters<StoreSync<StoreState<T>, K>>
): T extends Store ? ReturnType<StoreSync<StoreState<T>, K>> : void;

当存储状态发生变化时,立即并同步注册一个声音器函数.

batch

type Listener<S> = (state: S, prevState: S) => void | (() => void);

type Sync<S, K extends keyof S> = (
  keys: K[] | null,
  listener: Listener<Pick<S, K>>,
) => () => void;

type StoreBatch<S = State, K extends keyof S = keyof S> = Sync<S, K>;

function batch<T extends Store, K extends keyof StoreState<T>>(
  store?: T | null,
  ...args: Parameters<StoreBatch<StoreState<T>, K>>
): T extends Store ? ReturnType<StoreBatch<StoreState<T>, K>> : void;

注册一个听众函数,该函数在商店的一批状态变化之后立即被调用.

omit

type StoreOmit<
  S = State,
  K extends ReadonlyArray<keyof S> = ReadonlyArray<keyof S>,
> = (keys: K) => Store<Omit<S, K[number]>>;

function omit<T extends Store, K extends ReadonlyArray<keyof StoreState<T>>>(
  store?: T | null,
  ...args: Parameters<StoreOmit<StoreState<T>, K>>
): T extends Store ? ReturnType<StoreOmit<StoreState<T>, K>> : void;

创建一个带有当前存储状态子集并保持同步的新商店.

pick

type StorePick<
  S = State,
  K extends ReadonlyArray<keyof S> = ReadonlyArray<keyof S>,
> = (keys: K) => Store<Pick<S, K[number]>>;

function pick<T extends Store, K extends ReadonlyArray<keyof StoreState<T>>>(
  store?: T | null,
  ...args: Parameters<StorePick<StoreState<T>, K>>
): T extends Store ? ReturnType<StorePick<StoreState<T>, K>> : void;

创建一个带有当前存储状态子集并保持同步的新商店.

mergeStore

function mergeStore<S extends State>(
  ...stores: Array<Store<S> | undefined>
): Store<S>;

将多家商店合并为一个商店.

throwOnConflictingProps

function throwOnConflictingProps(props: AnyObject, store?: Store): void;

当商店道具与默认状态相接时会抛出.

State

type State = AnyObject;

存储状态类型 .

StoreOptions

type StoreOptions<S extends State, K extends keyof S> = Partial<Pick<S, K>>;

初始状态,可以传递给存储创建函数.

StoreProps

interface StoreProps<S extends State = State> {
  /**
   * Another store object that will be kept in sync with the original store.
   *
   * Live examples:
   * - [Navigation Menubar](https://ariakit.com/examples/menubar-navigation)
   */
  store?: Store<Partial<S>>;
}

可以传递到存储创建函数的道具.

StoreState

type StoreState<T> = T extends Store<infer S> ? S : never;

从存储类型中提取状态类型.

Store

interface Store<S = State> {
  /**
   * Returns the current store state.
   */
  getState(): S;
  /**
   * Sets a state value.
   */
  setState<K extends keyof S>(key: K, value: SetStateAction<S[K]>): void;
}

存储.

版本与发布记录

@ariakit/store 共发布 12 个版本,首次发布于 2026/05/23;过去 12 个月发布了 12 个版本。最新版本附带 npm provenance 构建来源证明,可追溯到公开的 CI 构建记录。

版本发布日期距今
0.1.11latest2026/10/1424 天前
0.1.102026/09/151 个月前
0.1.92026/08/242 个月前
0.1.82026/08/102 个月前
0.1.72026/07/243 个月前
0.1.62026/07/153 个月前

关于 @ariakit/store 的常见问题

@ariakit/store 是什么?

Ariakit 商店公用事业

如何安装 @ariakit/store?

在项目目录运行 npm install @ariakit/store,或使用 pnpm add / yarn add / bun add。

@ariakit/store 支持 TypeScript 吗?

支持。包内自带 TypeScript 类型声明(package.json 声明了 types 入口),安装后即可获得类型提示,无需再安装 @types 包。

@ariakit/store 支持 ESM 还是 CommonJS?

以 ES Module 形式发布,推荐使用 import 引入。在 CommonJS 项目中,Node.js 20.19+ / 22.12+ 可以直接 require() 不含顶层 await 的 ES Module,更早的版本需要改用动态 import()。

@ariakit/store 可以商用吗?

@ariakit/store 使用 MIT 许可。宽松许可:允许商业使用、修改和再分发,通常只需在分发时保留原版权与许可声明。以上为概括,不构成法律意见,请以许可原文为准。

@ariakit/store 的下载量有多少?

根据 npm 官方下载统计,@ariakit/store 在 2026/10/07 – 2026/11/05 这 30 天内被下载 3,437,498 次,日均约 114,583 次。下载量会把 CI 构建、镜像同步和作为其他包依赖的安装一并计入,适合横向比较热度,不能直接等同于使用人数。

@ariakit/store 还在维护吗?

最新版本 0.1.11 发布于 2026/10/14(24 天前);至今共发布 12 个版本,其中过去 12 个月发布了 12 个;首次发布于 2026/05/23。发布频率只是参考信号:功能稳定的工具可能很少需要更新,建议结合源码仓库的 issue 和提交记录判断。