UNPKG

@realsee/five

Version:

Realsee Renderer SDK

145 lines (144 loc) • 5.96 kB
import * as React from "react"; type StoreValueMapType = Record<string, any>; type StoreActionMapType = { [name: string]: (...args: any[]) => any; }; type StoreActionMapHanlder<T extends StoreValueMapType, K extends keyof T, M extends StoreActionMapType> = { [Key in keyof M]: [ callback: (getValues: () => Pick<T, K>, setValues: (values: Pick<T, K>) => void, ...args: Parameters<M[Key]>) => ReturnType<M[Key]>, ...deps: K[] ]; }; /** * 监听者模式 * @template T - 预设的监听回调类型 * @example * ``` * new Store<{ * "foo": [arg1: number, arg2: string], * "bar": [arg: boolean], * }>() * ``` */ declare class Store<T extends StoreValueMapType> { /** 值 */ 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<K extends keyof T>(names: K[], callback: (values: Pick<T, K>, prevValues: Pick<T, K>) => void): () => void; /** * 获取值 * @param names - 值的名称 */ getValues<K extends keyof T>(names: K[]): Pick<T, K>; /** * 设置值 * @param values - 设置值 */ setValues<K extends keyof T>(names: K[], values: Pick<T, K>): void; } declare function createStore<T extends StoreValueMapType, A extends StoreActionMapType = {}>(actionHandler: StoreActionMapHanlder<T, keyof T, A>): { /** * 使用 Store * @param names - 获取的 Store 字段 * @returns [值, 修改值方法] */ useStore<K extends keyof T>(names: K[]): [values: Pick<T, K>, setValues: (values: Pick<T, K>) => void]; /** * 使用 Store (仅设置值) * @param names - 获取的 Store 字段 * @returns 修改值方法 */ useStoreSetter<K extends keyof T>(names: K[]): (values: Pick<T, K>) => void; /** * 监听 Store 变化 * @param names - Store 字段 * @param callback - 监听变化的回调函数 * @param deps - 依赖对象 */ watchStore<K extends keyof T>(names: K[], callback: (values: Pick<T, K>, prevValues: Pick<T, K>) => void, deps?: React.DependencyList | undefined): void; useStoreAction<N extends keyof A, F extends A[N]>(actionName: N): F; /** * Store Provider. * 内部组件均可和 store 交互 */ StoreProvider: { new (props: { initialValue: T; onValuesChange?: (value: T, prevValue: T) => void; children: React.ReactNode; }): { store: Store<T>; shouldComponentUpdate(nextProps: { initialValue: T; onValuesChange?: (value: T, prevValue: T) => void; children: React.ReactNode; }): boolean; render(): React.FunctionComponentElement<React.ProviderProps<Store<T> | null>>; context: any; setState<K extends never>(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<any> | undefined; }; }; type StoreProviderType = ReturnType<typeof createStore>["StoreProvider"]; export { Store, createStore, StoreProviderType, StoreValueMapType, StoreActionMapType, StoreActionMapHanlder };