UNPKG

@td-design/rn-hooks

Version:

从ahooks里面抽取的一些在rn项目里可以使用的hooks。提高开发效率

46 lines (43 loc) 1.77 kB
import { __spreadArray, __read } from '../_virtual/_tslib.js'; import { useMemo, useRef } from 'react'; import useMemoizedFn from '../useMemoizedFn/index.js'; import useUpdate from '../useUpdate/index.js'; import { isFunction } from '../utils/index.js'; function useControllableValue(props, options) { if (props === void 0) { props = {}; } if (options === void 0) { options = {}; } var defaultValue = options.defaultValue, _a = options.defaultValuePropName, defaultValuePropName = _a === void 0 ? 'defaultValue' : _a, _b = options.valuePropName, valuePropName = _b === void 0 ? 'value' : _b, _c = options.trigger, trigger = _c === void 0 ? 'onChange' : _c; var value = props[valuePropName]; var isControlled = props.hasOwnProperty(valuePropName); var initialValue = useMemo(function () { if (isControlled) { return value; } if (props.hasOwnProperty(defaultValuePropName)) { return props[defaultValuePropName]; } return defaultValue; // eslint-disable-next-line react-hooks/exhaustive-deps }, []); var stateRef = useRef(initialValue); if (isControlled) { stateRef.current = value; } var update = useUpdate(); function setState(v) { var args = []; for (var _i = 1; _i < arguments.length; _i++) { args[_i - 1] = arguments[_i]; } var r = isFunction(v) ? v(stateRef.current) : v; if (!isControlled) { stateRef.current = r; update(); } if (props[trigger]) { props[trigger].apply(props, __spreadArray([r], __read(args), false)); } } return [stateRef.current, useMemoizedFn(setState)]; } export { useControllableValue as default };