@td-design/rn-hooks
Version:
从ahooks里面抽取的一些在rn项目里可以使用的hooks。提高开发效率
59 lines (55 loc) • 1.67 kB
JavaScript
;
var _tslib = require('../_virtual/_tslib.js');
var react = require('react');
var index = require('../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 = _tslib.__read(react.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: index(inc),
dec: index(dec),
set: index(set),
reset: index(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;
}
module.exports = useCounter;