Skip to content

Releases: alibaba/hooks

v3.10.0

Choose a tag to compare

@crazylxr crazylxr released this 06 Sep 02:03

ahooks 3.10.0

中文

新功能与增强

  • useAsyncEffect 支持同步返回清理函数,在依赖变化和卸载时由 React 执行清理。注意:这不支持 async () => cleanup,异步函数返回的清理函数不在本次支持范围内。#2958
  • useLocalStorageState 新增 getInitialValueInEffect,允许挂载后再读取存储,以避免 SSR hydration 不一致。#2906
  • useSetState 支持省略初始状态,返回状态类型为 Partial<T>#2905
  • useAntdTable 支持表单实例的 validateFieldsReturnFormatValue,兼容 ProForm 的 transform

修复

  • useRequest 修复被取消或被后续调用覆盖时的异步调用悬挂问题,并提供 CancelledError / isCancelledError#2951
  • useRequest 修复节流场景下 runAsync 不生效,以及 ready=false 时防抖前沿调用影响后续请求的问题。#2899#2946
  • useRequest 修复默认参数场景的类型推导,并在删除缓存时清理相关定时器。#2907#2909
  • useInfiniteScroll 修复首次 loadMore 期间闭包读取旧数据的问题。#2896
  • useKeyPress 修复 exactMatch 下修饰键的 keyup 事件匹配。#2944
  • useLongPress 修复 Pointer Events 支持。#2947
  • useTheme 为旧版 Safari 提供媒体查询监听回退。#2916
  • 修复 useEventListener 显式泛型与 ref target 的兼容性,并保留非空 ref 的返回类型。#2903#2956
  • 移除已废弃的 intersection-observer 依赖。#2904

升级注意

runAsync / refreshAsync 被取消或被新调用覆盖时,会以 CancelledError 拒绝,而不再一直保持 pending。直接调用这些异步 API 的代码应捕获异常,并用 isCancelledError 区分取消与业务错误;run / refresh 会内部处理取消。

English

Features and enhancements

  • Support synchronous cleanup functions in useAsyncEffect, with React managing cleanup on dependency changes and unmount. Returning cleanup from an async callback remains unsupported. #2958
  • Add getInitialValueInEffect to useLocalStorageState to defer storage reads until after mount and avoid SSR hydration mismatches. #2906
  • Allow useSetState without an initial state, returning Partial<T>. #2905
  • Support ProForm's transform in useAntdTable through validateFieldsReturnFormatValue.

Fixes

  • Settle cancelled or superseded useRequest asynchronous calls with CancelledError; export CancelledError and isCancelledError. #2951
  • Fix throttled runAsync calls and debounce leading behavior while ready=false. #2899, #2946
  • Fix default-parameter type inference and clear timers when request cache entries are deleted. #2907, #2909
  • Fix stale data captured during the initial loadMore in useInfiniteScroll. #2896
  • Fix modifier-key keyup matching with exactMatch in useKeyPress. #2944
  • Fix Pointer Events support in useLongPress. #2947
  • Fall back to legacy media query listeners in useTheme for older Safari versions. #2916
  • Fix explicit generic and ref target compatibility in useEventListener, and preserve non-nullable ref return types. #2903, #2956
  • Remove the deprecated intersection-observer dependency. #2904

Upgrade note

Cancelled or superseded runAsync / refreshAsync calls now reject with CancelledError instead of remaining pending. Catch errors when using these APIs directly and use isCancelledError to distinguish cancellation from service errors. run / refresh handle cancellation internally.

Full changelog: v3.9.7...v3.10.0

v3.9.7

Choose a tag to compare

@liuyib liuyib released this 23 Mar 15:49
289989f

What's Changed

  • 🐛 Bug 修复

    • @linhf123 贡献,在 #2881 中为 useInfiniteScroll 使用 requestAnimationFrame 来更新滚动位置。
    • @lvboda 贡献,在 #2866 中修复了 useRequestready=falserunAsync 未立即返回的问题(无 pending 状态)。
    • @Arktomson 贡献,在 #2900 中为 useKeyPress 添加了旧版 key 别名以提高兼容性。
    • @guaijie 贡献,在 #2884 中修复了 useRafInterval 在执行函数内部调用 clear 无效的问题。
    • @li-jia-nan 贡献,在 #2912 中修复了相同 storage 状态导致重复渲染的问题。
  • 🛠️ 代码重构

    • @JunlinZhu-Tommy 贡献,在 #2887 中将 useUpdate 中的 useCallback 替换为 useMemoizedFn
    • @li-jia-nan 贡献,在 #2868 中进行了代码优化。
    • @nghiepdev 贡献,在 #2859 中在 useIsomorphicLayoutEffect 中使用 noop 替代 useEffect
  • 🔧 性能优化

  • 📖 文档更新

    • @huangkevin-apr 贡献,在 #2892 中为讨论组图片添加了 alt 属性以提升可访问性。

  • 🐛 Bug Fixes

    • Contributed by @linhf123, used requestAnimationFrame to update scroll position in useInfiniteScroll in #2881.
    • Contributed by @lvboda, fixed the issue where runAsync did not return immediately when ready=false (no pending) in useRequest in #2866.
    • Contributed by @Arktomson, added legacy key aliases for compatibility in useKeyPress in #2900.
    • Contributed by @guaijie, fixed the issue where calling clear inside the execution function of useRafInterval did not take effect in #2884.
    • Contributed by @li-jia-nan, fixed unnecessary re-renders when the storage state remained the same in #2912.
  • 🛠️ Code Refactoring

    • Contributed by @JunlinZhu-Tommy, replaced useCallback with useMemoizedFn in useUpdate in #2887.
    • Contributed by @li-jia-nan, performed code optimizations in #2868.
    • Contributed by @nghiepdev, used noop instead of useEffect in useIsomorphicLayoutEffect in #2859.
  • 🔧 Performance

  • 📖 Documentation Updates

    • Contributed by @huangkevin-apr, added alt attributes to discussion group images for accessibility in #2892.

New Contributors

Full Changelog: v3.9.6...v3.9.7

v3.9.6

Choose a tag to compare

@crazylxr crazylxr released this 27 Oct 05:00

What's Changed

  • 🔧 工程维护

  • 🔧 Engineering Maintenance

Full Changelog: v3.9.5...v3.9.6

v3.9.5

Choose a tag to compare

@crazylxr crazylxr released this 31 Aug 14:02

What's Changed

  • 🆕 新功能
    • @Arktomson 贡献,在 #2844 中将 js-cookie 的类型包放到生产依赖中。
  • 🛠️ 代码重构
    • @BH4HPA 贡献,在 #2843 中对 useUrlState 进行重构,将 initialState 重命名为 baseState。
  • 🔧 项目配置
    • @crazylxr 贡献,在 #2848 中禁用了 es 构建的 sourceMap,以避免发布 .js.map 文件。
  • 📖 文档更新
    • @atharva6868 贡献,在 #2840 中为 useBoolean 钩子添加了新的使用示例。
  • 🐛 Bug 修复
    • @guaijie 贡献,在 #2838 中修复了 refreshDepsAction 提供后依赖刷新没有执行的 bug。

  • 🆕 New Features
    • Contributed by @Arktomson, added the type package of js-cookie to the production dependencies in #2844.
  • 🛠️ Code Refactoring
    • Contributed by @BH4HPA, refactored useUrlState and renamed initialState to baseState in #2843.
  • 🔧 Project Configuration
    • Contributed by @crazylxr, disabled the sourceMap for es build to avoid publishing .js.map files in #2848.
  • 📖 Documentation Updates
    • Contributed by @atharva6868, added a new usage example for the useBoolean hook in #2840.
  • 🐛 Bug Fixes
    • Contributed by @guaijie, fixed the bug that the dependency refresh did not execute after refreshDepsAction was provided in #2838.

New Contributors

Full Changelog: v3.9.4...v3.9.5

v3.9.4

Choose a tag to compare

@crazylxr crazylxr released this 22 Aug 05:15
6b7ab47

What's Changed

💪 chore: 测试命令改进。由 @meet-student 贡献,详情见 PR #2835
🐞 fix: 修复 reloadAsync runAsync 负载问题。由 @meet-student 贡献,详情见 PR #2836


💪 chore: Test command improvement. Contributed by @meet-student, see PR #2835 for details.
🐞 fix: Fix the payload issue of reloadAsync runAsync. Contributed by @meet-student, see PR #2836 for details.

Full Changelog: v3.9.3...v3.9.4

v3.9.3

Choose a tag to compare

@crazylxr crazylxr released this 18 Aug 10:19

What's Changed

  • 🐞 修复:修复 useRequest 在配置 cachekey 后,某些情况下不执行 onSuccess 方法的问题 (#2035) @xun-zi #2255
  • 🐞 修复:修复 useMount 返回 Promise 的问题 @meet-student #2833

  • 🐞 Fix: Fixed the issue that the onSuccess method of useRequest was not executed in some cases after configuring cachekey (#2035) @xun-zi #2255
  • 🐞 Fix: Fixed the problem of useMount returning a Promise @meet-student #2833

New Contributors

Full Changelog: v3.9.1...v3.9.3

v3.9.1

Choose a tag to compare

@crazylxr crazylxr released this 17 Aug 13:00

What's Changed

  • 🆕 新功能
  • 🔧 配置更新
  • 🐛 问题修复
    • fix: createUseStorageState 类型未知问题 by @meet-student in #2795
    • fix: 修复 useRequest 在启动两个以上轮询时,设置页面隐藏停止轮询,页面重新显示时,有请求不自动开始轮询的问题。 by @JaxonJay in #2688
    • fix: 修复 useInfiniteScroll 时序竞争问题 by @duwenhan2byte in #2786
    • fix: 提取集合操作的公共函数 by @maxiaokai1996 in #2661
    • fix: 修复 readyState 判断问题 by @dongmucat in #2705
    • fix: tsconfig 问题 by @ianzone in #2805
  • 🎨 代码重构
  • 📖 文档修复
  • 测试更新
    • test(use-url-state): 使用 vitest 进行测试 by @ianzone in #2804
    • test(createDeepCompareEffect): 使用 vitest 进行测试 by @ianzone in #2807
    • test(createUpdateEffect): 使用 vitest 进行测试 by @ianzone in #2810
    • test(useBoolean): 使用 vitest 进行测试 by @ianzone in #2813
    • test(useStorageState): 使用 vitest 进行测试 by @ianzone in #2811
    • test(useAsyncEffect): 使用 vitest 进行测试 by @ianzone in #2812
  • 👷 CI 相关

  • 🆕 New Features
  • 🔧 Configuration Updates
  • 🐛 Bug Fixes
    • fix: Fix the unknown type issue of createUseStorageState by @meet-student in #2795
    • fix: Fix the problem that when useRequest starts more than two polling requests, if the page is set to hide to stop polling, and the page is redisplayed, some requests do not automatically start polling. by @JaxonJay in #2688
    • fix: Fix the timing competition issue of useInfiniteScroll by @duwenhan2byte in #2786
    • fix: Extract common functions for set operations by @maxiaokai1996 in #2661
    • fix: Fix the readyState judgment issue by @dongmucat in #2705
    • fix: Fix tsconfig issues by @ianzone in #2805
  • 🎨 Code Refactoring
  • 📖 Documentation Fixes
  • Test Updates
    • test(use-url-state): Use vitest for testing by @ianzone in #2804
    • test(createDeepCompareEffect): Use vitest for testing by @ianzone in #2807
    • test(createUpdateEffect): Use vitest for testing by @ianzone in #2810
    • test(useBoolean): Use vitest for testing by @ianzone in #2813
    • test(useStorageState): Use vitest for testing by @ianzone in #2811
    • test(useAsyncEffect): Use vitest for testing by @ianzone in #2812
  • 👷 CI Related

New Contributors

Full Changelog: v3.9.0...v3.9.1

v3.9.0

Choose a tag to compare

@crazylxr crazylxr released this 28 Jun 14:05

What's Changed

  • 🆕 新功能
  • ⬆️ 依赖升级
  • 🐛 Bug 修复
    • @Triumph-light 贡献,在 #2778 中修复了运行开发环境的问题。
    • @ZephyrAndMoon 贡献,在 #2785 中修改了 useLonePress 在特殊设备、特殊情况下长按事件不触发的问题。
  • 📖 文档更新
    • @cwen-jdoit 贡献,在 #2678 中更新了 useLocalStorageState 的文档。
    • @superBigPotato 贡献,在 #2680 中修改了 useClickAway 文档描述,使 Target 属性支持函数。
    • @xbsheng 贡献,在 #2787 中更新了 style.css 的路径。

  • 🆕 New Features
  • ⬆️ Dependency Upgrade
  • 🐛 Bug Fixes
    • Contributed by @Triumph-light, fixed the issue of running the development environment in #2778.
    • Contributed by @ZephyrAndMoon, modified the problem that the long - press event of useLonePress does not trigger under special devices and special circumstances in #2785.
  • 📖 Documentation Updates
    • Contributed by @cwen-jdoit, updated the documentation of useLocalStorageState in #2678.
    • Contributed by @superBigPotato, modified the documentation description of useClickAway to make the Target property support functions in #2680.
    • Contributed by @xbsheng, updated the path of style.css in #2787.

New Contributors

Full Changelog: v3.8.5...v3.9.0

v3.8.5

Choose a tag to compare

@crazylxr crazylxr released this 19 May 03:49
661f1ff

What's Changed

🐛 修复问题

  • fix: 修复 SSR 场景下的 bug by @li-jia-nan in #2691
  • fix: 修复 createUseStorageState 在 3.7.7 以上版本返回 undefined 类型的问题 by @chooin in #2681
  • fix(useAntdHooks): 修复 autoRequest 与 manual: true 冲突的问题 by @yangliguo7 in #2714
  • 修复变量未定义导致的 run test 报错问题 by @luckymore in #2772

📘 文档改进

🛠 开发工具与维护

🔧 类型与性能优化


New Contributors

Full Changelog: v3.8.2...v3.8.5

v3.8.2

Choose a tag to compare

@li-jia-nan li-jia-nan released this 04 Dec 15:53

What's Changed

  • 🔥 feat: add useTheme hook by @ianzone in #2617
  • 🔥 feat: support for array as event parameter in useEventListener by @askwuxue in #2598
  • 🔥 feat: support useInfiniteScroll scroll to top by @jaluik in #2565
  • 🐛 fix: Compatible with the case where props is null in useControllableValue by @mmmml-zhao in #2636
  • 🐛 fix: When manual=true, defaultParam will not populate the default values in form. by @askwuxue in #2594
  • 🛠 chore: Wrap the second parameter of the return value from useSetState with useMemoriedFn. by @askwuxue in #2592
  • 🛠 chore: Replace prettier with biome by @ianzone in #2629
  • 🛠 chore: Update pnpm to v9 by @ianzone in #2621

  • 🔥 feat: 新增 hook useTheme by @ianzone in #2617
  • 🔥 feat: useEventListener 事件支持传入数组参数 by @askwuxue in #2598
  • 🔥 feat: useInfiniteScroll 支持了direction, 提供向上滚动加载的支持 by @jaluik in #2565
  • 🐛 fix: 兼容了 useControllableValue 的 props 为 null 的情况 by @mmmml-zhao in #2636
  • 🐛 fix: useAntdTable 在 manual=true 的情况下 defaultParam 不会填充表单默认值 by @askwuxue in #2594
  • 🛠 chore: 使用 useMemoriedFn 包装 useSetState 返回值中的第二个参数 by @askwuxue in #2592
  • 🛠 chore: 使用 biome 替换 prettier by @ianzone in #2629
  • 🛠 chore: 更新 pnpm 至 v9 by @ianzone in #2621

New Contributors

Full Changelog: v3.8.1...v3.8.2