@td-design/rn-hooks
Version:
从ahooks里面抽取的一些在rn项目里可以使用的hooks。提高开发效率
57 lines (54 loc) • 1.69 kB
JavaScript
import { __read } from '../_virtual/_tslib.js';
import { useState } from 'react';
import useMemoizedFn from '../useMemoizedFn/index.js';
/**
* 步进器效果
* @param initialValue
* @param options
* @returns
*/
function useCounter(initialValue, options) {
if (initialValue === void 0) { initialValue = 0; }
if (options === void 0) { options = {}; }
var _a = __read(useState(function () { return getTargetValue(initialValue, options); }), 2), current = _a[0], setCurrent = _a[1];
var setValue = function (value) {
setCurrent(function (c) {
var target = typeof value === 'number' ? value : value(c);
return getTargetValue(target, options);
});
};
var inc = function (delta) {
if (delta === void 0) { delta = 1; }
setValue(function (c) { return c + delta; });
};
var dec = function (delta) {
if (delta === void 0) { delta = 1; }
setValue(function (c) { return c - delta; });
};
var set = function (value) {
setValue(value);
};
var reset = function () {
setValue(initialValue);
};
var actions = {
inc: useMemoizedFn(inc),
dec: useMemoizedFn(dec),
set: useMemoizedFn(set),
reset: useMemoizedFn(reset),
};
return [current, actions];
}
function getTargetValue(val, options) {
if (options === void 0) { options = {}; }
var min = options.min, max = options.max;
var target = val;
if (typeof max === 'number') {
target = Math.min(max, target);
}
if (typeof min === 'number') {
target = Math.max(min, target);
}
return target;
}
export { useCounter as default };