/** * @file index.ts * @author imcuttle * */ import * as React from 'react'; export declare function useUncontrolledCore(propValue?: T, { initialValue, useEffect, eq, onChange }?: { eq?: (a: T, b: T) => boolean; initialValue?: T; useEffect?: typeof React.useEffect; onChange?: (value: T) => void; }): [T | undefined, (newValue: ((value: T) => T) | T) => void]; /** * @public * @name useUncontrolled * @param [value] {T} - Piped value * @param [defaultValue] {T} - Initialize value firstly * @param [onChange] {(value: T) => void} - Bind `onChange` handler when value updating * @param [useEffect] {typeof React.useLayoutEffect} * @param [eq] {(a: T, b: T) => boolean} * @returns {Array} `[T, ((value: T) => T | T) => void]` * @example * function Input({value, onChangeValue, defaultValue}) { * const [valueState, setValue] = useUncontrolled({value, onChange: onChangeValue, defaultValue}) * * return setValue(evt.target.value)} /> * } */ export default function useUncontrolled({ value, defaultValue, onChange, useEffect, eq }: { useEffect?: typeof React.useEffect; value?: T; defaultValue?: T; onChange?: (value: T) => void; eq?: (a: T, b: T) => boolean; }): [T, (newValue: T | ((value: T) => T)) => void];