useCounter
package version >0.1.1
shadcn any version
author: cmtlyt
update time: 2026/04/01 16:07:21
一个功能强大的计数器 Hook,支持自定义步长、边界值限制,并提供完整的计数器操作方法。
特性
- 灵活的初始化:支持自定义初始值、最小值、最大值和步长
- 边界值限制:自动处理 min/max 边界,确保值在有效范围内
- 多种操作方法:支持增减、重置、直接设置值等操作
- 函数式更新:支持通过函数动态计算新值
- 类型安全:完整的 TypeScript 类型支持
- 错误处理:内置数据验证,自动处理非数字值
install
npm
shadcn
usage
基础用法
最简单的用法,使用默认配置:
高级用法
自定义步长
设置边界值
自定义增量
函数式更新
复杂场景:购物车数量控制
API
useCounter
参数
-
initialValue:
number(default:0)- 计数器的初始值
-
options:
Partial<UseCounterOptions>(optional)- 配置选项
Options
返回值
返回一个元组 [count, actions]:
- count:
number- 当前计数值 - actions:
CounterActions- 操作方法对象
CounterActions
使用场景
1. 分页控制
2. 评分组件
3. 倒计时
4. 进度条控制
注意事项
边界值处理
- 当值超过
max时,会被限制为max - 当值小于
min时,会被限制为min - 步长
step会自动取绝对值,确保增量始终为正数
数据验证
- 如果传入的初始值或选项值不是有效数字,会使用默认值并输出警告日志
- 使用
Number.isNaN()进行严格的数字验证
性能优化
- 使用
useEffectEvent确保操作方法引用稳定 - 使用
useMemo缓存操作方法对象,避免不必要的重新创建
重置行为
reset()方法会将计数器重置为初始值(即调用useCounter时传入的initialValue)- 重置时会考虑当前的
min/max配置,确保重置后的值在有效范围内
与 useState 的区别
useCounter 提供了比 useState 更丰富的计数器功能:
- 内置边界值限制
- 提供增减、重置等常用方法
- 自动处理步长
- 更好的类型推断
Comparison
vs 自定义实现
useCounter 提供了更简洁、更可靠的实现,内置了边界处理和错误处理逻辑。