@ ariakit/ 仓库
重要内容: 这个软件包是实验性的,并不遵循语义化的版本,意思是断裂变化可能发生在补丁和小版本中.
Ariakit软件包所使用的框架-不可知存储原始.
目录
安装
npm i @ariakit/store
使用量
从软件包根导入商店助手 :
import { createStore } from "@ariakit/store";
这一一揽子方案只采用无害环境管理,并暴露出单一的公众切入点.
API 参考
createStoresetupinitsubscribesyncbatchomitpickmergeStorethrowOnConflictingPropsStateStoreOptionsStorePropsStoreStateStore
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;
}
存储.