import * as React from "react"; type StoreValueMapType = Record; type StoreActionMapType = { [name: string]: (...args: any[]) => any; }; type StoreActionMapHanlder = { [Key in keyof M]: [ callback: (getValues: () => Pick, setValues: (values: Pick) => void, ...args: Parameters) => ReturnType, ...deps: K[] ]; }; /** * 监听者模式 * @template T - 预设的监听回调类型 * @example * ``` * new Store<{ * "foo": [arg1: number, arg2: string], * "bar": [arg: boolean], * }>() * ``` */ declare class Store { /** 值 */ values: T; /** 全局的数据变化钩子 */ onValuesChange?: (values: T, prevValues: T) => void; private listeners; constructor(initialValue: T, onValuesChange?: (values: T, prevValues: T) => void); /** * 监听数据变化 * @param names - 监听的字段名称 * @param callback - 回调函数 * @returns 解除监听数据变化 */ on(names: K[], callback: (values: Pick, prevValues: Pick) => void): () => void; /** * 获取值 * @param names - 值的名称 */ getValues(names: K[]): Pick; /** * 设置值 * @param values - 设置值 */ setValues(names: K[], values: Pick): void; } declare function createStore(actionHandler: StoreActionMapHanlder): { /** * 使用 Store * @param names - 获取的 Store 字段 * @returns [值, 修改值方法] */ useStore(names: K[]): [values: Pick, setValues: (values: Pick) => void]; /** * 使用 Store (仅设置值) * @param names - 获取的 Store 字段 * @returns 修改值方法 */ useStoreSetter(names: K[]): (values: Pick) => void; /** * 监听 Store 变化 * @param names - Store 字段 * @param callback - 监听变化的回调函数 * @param deps - 依赖对象 */ watchStore(names: K[], callback: (values: Pick, prevValues: Pick) => void, deps?: React.DependencyList | undefined): void; useStoreAction(actionName: N): F; /** * Store Provider. * 内部组件均可和 store 交互 */ StoreProvider: { new (props: { initialValue: T; onValuesChange?: (value: T, prevValue: T) => void; children: React.ReactNode; }): { store: Store; shouldComponentUpdate(nextProps: { initialValue: T; onValuesChange?: (value: T, prevValue: T) => void; children: React.ReactNode; }): boolean; render(): React.FunctionComponentElement | null>>; context: any; setState(state: {} | ((prevState: Readonly<{}>, props: Readonly<{ initialValue: T; onValuesChange?: (value: T, prevValue: T) => void; children: React.ReactNode; }>) => {} | Pick<{}, K> | null) | Pick<{}, K> | null, callback?: (() => void) | undefined): void; forceUpdate(callback?: (() => void) | undefined): void; readonly props: Readonly<{ initialValue: T; onValuesChange?: (value: T, prevValue: T) => void; children: React.ReactNode; }> & Readonly<{ children?: React.ReactNode | undefined; }>; state: Readonly<{}>; refs: { [key: string]: React.ReactInstance; }; componentDidMount?(): void; componentWillUnmount?(): void; componentDidCatch?(error: Error, errorInfo: React.ErrorInfo): void; getSnapshotBeforeUpdate?(prevProps: Readonly<{ initialValue: T; onValuesChange?: (value: T, prevValue: T) => void; children: React.ReactNode; }>, prevState: Readonly<{}>): any; componentDidUpdate?(prevProps: Readonly<{ initialValue: T; onValuesChange?: (value: T, prevValue: T) => void; children: React.ReactNode; }>, prevState: Readonly<{}>, snapshot?: any): void; componentWillMount?(): void; UNSAFE_componentWillMount?(): void; componentWillReceiveProps?(nextProps: Readonly<{ initialValue: T; onValuesChange?: (value: T, prevValue: T) => void; children: React.ReactNode; }>, nextContext: any): void; UNSAFE_componentWillReceiveProps?(nextProps: Readonly<{ initialValue: T; onValuesChange?: (value: T, prevValue: T) => void; children: React.ReactNode; }>, nextContext: any): void; componentWillUpdate?(nextProps: Readonly<{ initialValue: T; onValuesChange?: (value: T, prevValue: T) => void; children: React.ReactNode; }>, nextState: Readonly<{}>, nextContext: any): void; UNSAFE_componentWillUpdate?(nextProps: Readonly<{ initialValue: T; onValuesChange?: (value: T, prevValue: T) => void; children: React.ReactNode; }>, nextState: Readonly<{}>, nextContext: any): void; }; contextType?: React.Context | undefined; }; }; type StoreProviderType = ReturnType["StoreProvider"]; export { Store, createStore, StoreProviderType, StoreValueMapType, StoreActionMapType, StoreActionMapHanlder };