@eficy/reactive-react
Version:
React bindings for @eficy/reactive - MobX-compatible reactive state management with React integration
44 lines (43 loc) • 1.9 kB
TypeScript
import React, { FC } from "react";
import "@preact/signals-react/runtime";
import { Action, Computed, Observable, ObservableClass, batch, computed, createAction, effect, isRef, isSignal, makeObservable, ref, signal, unref, watch } from "@eficy/reactive";
//#region src/types.d.ts
interface IObserverOptions {
forwardRef?: boolean;
scheduler?: (updater: () => void) => void;
displayName?: string;
}
interface IObserverProps {
children?: (() => React.ReactElement) | React.ReactNode;
}
type Modify<T, R> = Omit<T, keyof R> & R;
type ReactPropsWithChildren<P> = Modify<{
children?: React.ReactNode | undefined;
}, P>;
type ReactFC<P = {}> = React.FC<ReactPropsWithChildren<P>>;
//#endregion
//#region src/observer.d.ts
declare function observer<P = any>(component: ReactFC<P>, options?: IObserverOptions): FC<P>;
//#endregion
//#region src/hooks/useObserver.d.ts
declare function useObserver(): void;
declare function useObserver<T extends () => unknown>(view: T): ReturnType<T>;
//#endregion
//#region src/hooks/useForceUpdate.d.ts
declare function useForceUpdate(): () => void;
//#endregion
//#region src/hooks/useReactive.d.ts
/**
* 便捷 hook:使用响应式状态
* 基于新的简化范式,返回 [state, setState] 模式
*
* 使用示例:
* const [user, setUser] = useReactive({ name: '', age: 0 })
*
* // 更新状态(新范式:重新赋值整个对象)
* setUser({ name: 'John', age: 25 })
* setUser(prev => ({ ...prev, name: 'John' }))
*/
declare function useReactive<T extends Record<string, unknown>>(initialState: T): [T, (updater: T | ((prev: T) => T)) => void];
//#endregion
export { Action, Computed, IObserverOptions, IObserverProps, Modify, Observable, ObservableClass, ReactFC, ReactPropsWithChildren, batch, computed, createAction, effect, isRef, isSignal, makeObservable, observer, ref, signal, unref, useForceUpdate, useObserver, useReactive, watch };