use-immer
Version:
Use immer with React hooks
15 lines (14 loc) • 1.1 kB
text/typescript
import { Draft, nothing } from "immer";
import { Dispatch } from "react";
export declare type DraftFunction<S> = (draft: Draft<S>) => void;
export declare type Updater<S> = (arg: S | DraftFunction<S>) => void;
export declare type ImmerHook<S> = [S, Updater<S>];
export declare function useImmer<S = any>(initialValue: S | (() => S)): ImmerHook<S>;
export declare type ImmerReducer<S, A> = (draftState: Draft<S>, action: A) => void | (S extends undefined ? typeof nothing : S);
/**
* @deprecated Use `ImmerReducer` instead since there is already a `Reducer` type in `@types/react`.
*/
export declare type Reducer<S = any, A = any> = ImmerReducer<S, A>;
export declare function useImmerReducer<S, A, I>(reducer: ImmerReducer<S, A>, initializerArg: S & I, initializer: (arg: S & I) => S): [S, Dispatch<A>];
export declare function useImmerReducer<S, A, I>(reducer: ImmerReducer<S, A>, initializerArg: I, initializer: (arg: I) => S): [S, Dispatch<A>];
export declare function useImmerReducer<S, A>(reducer: ImmerReducer<S, A>, initialState: S, initializer?: undefined): [S, Dispatch<A>];