UNPKG

@td-design/rn-hooks

Version:

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

48 lines (44 loc) 1.77 kB
'use strict'; var _tslib = require('../_virtual/_tslib.js'); var react = require('react'); var index$1 = require('../useMemoizedFn/index.js'); var index = require('../useUpdate/index.js'); var index$2 = require('../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 = react.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 = react.useRef(initialValue); if (isControlled) { stateRef.current = value; } var update = index(); function setState(v) { var args = []; for (var _i = 1; _i < arguments.length; _i++) { args[_i - 1] = arguments[_i]; } var r = index$2.isFunction(v) ? v(stateRef.current) : v; if (!isControlled) { stateRef.current = r; update(); } if (props[trigger]) { props[trigger].apply(props, _tslib.__spreadArray([r], _tslib.__read(args), false)); } } return [stateRef.current, index$1(setState)]; } module.exports = useControllableValue;