UNPKG

@eficy/reactive-react

Version:

React bindings for @eficy/reactive - MobX-compatible reactive state management with React integration

44 lines (43 loc) 1.9 kB
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 };