当前位置: 首页 > 科技观察

Ahooks3.0来了!优质可靠的ReactHooks库

时间:2023-03-16 21:57:00 科技观察

ahooks[1]是一个开源的ReactHooks库,封装了大量好用的Hooks。在目前的React项目开发过程中,一套好用的ReactHooks库是必不可少的,希望ahooks能够成为你的选择。ahooks(umihooks)第一版自2019年8月发布以来,已经经历了2年的发展,得到了国内外社区众多同学的认可。ahooks2.0目前的成绩主要有:覆盖阿里内部上千个前端应用,开发60+Hooksnpm&tnpm周下载量7w+GitHubstar7.4k在这两年的发展中,随着对ReactHooks的理解不断深入,我们可以看到ahooks2.0在设计上的很多不足。在这样的背景下,我们决定开发3.0版本。ahooks3.0的目标是打造一个优质可靠的ReactHooks库,我们希望成为像lodash一样稳定的基础依赖。相比2.0有以下优势:全面支持SSR新增useRequest所有输出函数地址固定,避免闭包问题DOM类Hooks支持目标动态变化更合理的API设计解决了严格模式(StrictMode)问题解决react-refresh(HRM)模式下的问题,增加了更多的Hooks,修复了很多已知问题,全面支持SSRReactHooks在SSR场景下,经常会遇到“DOM/BOMmissing”、“useLayoutEffectwarning”两个问题。ahooksv3.0彻底解决了这两个问题,大家可以安心的在SSR场景中使用ahooks。更多信息请参考《React Hooks & SSR[2]》全新的useRequestuseRequest是ahooks使用最多的Hook,也是问题最多的Hook。总结一下,useRequest之前最大的问题是:代码拆分不合理,所有功能都混在一个文件里,改动非常复杂。部分功能上线前没有充分演示,导致功能设计不合理,但无法下载。pagination和loadMore逻辑的结合,让ts的类型复杂到难以想象。ahooksv3.0版本完全重写了useRequest:代码通过插件来组织,核心代码极其简单,所有高级功能都通过插件实现。仔细演示所有提供的功能,以确保在线功能是最佳解决方案。对于有疑问的能力,逐步添加所有参数以支持动态变化。删除分页和加载更多逻辑。单独拆分其他Hooks提供相应的能力,避免ts类型重载。你可以更全面的封装基于useRequest的更高级的Hooks。多多修复剩余问题请参考《全新的 useRequest[3]》函数的特殊处理,避免出现闭包问题。ahooksv3通过对输入输出函数做特殊处理,尽量帮助大家避免闭包问题。我觉得这个能力是ahooks比较激进的部分,但是确实可以给用户提供非常好的体验。1、ahooks的所有输出函数,地址不会改变const[state,setState]=React.useState();众所周知,React.useState返回的setState函数的地址是固定的,所以在使用的时候不需要考虑奇怪的问题,就是不需要把setState放在各种依赖中。ahooksv3.0返回的所有函数都和setState有相同的特性,地址不会变,请放心大胆使用。2.对于所有用户输入函数,始终使用最新的函数。对于接收到的函数,ahooksv3会做一个特殊的处理,保证每次调用的函数始终是最新的。const[state,setState]=useState();useInterval(()=>{console.log(state);},1000);比如上面的例子,useInterval在任何时刻调用的函数总是最新的,即状态总是Newest。更多内容请参考《DOM 类 Hooks 使用规范[5]》更多bug修复DOM类Hooks支持target动态变化,相关文档见《DOM 类 Hooks 使用规范[5]》v3修复了严格模式下的一些问题。参考《React Hooks & strict mode[6]》v3修复react-refresh(HRM)模式下的一些问题。参考《React Hooks & react-refresh(HMR)[7]》,更多改动参考文末的《v2 to v3[8]》。ahooksv3.0的口号是“优质可靠的ReactHooks库”。图书馆之一。感谢ahooks的共建者和用户!欢迎试用v3.0!$npminstall--saveahooks@next#or$yarnaddahooks@next文档:https://ahooks.js.org/zh-CN[9]源码:https://github.com/alibaba/hooks[10]References[1]ahooks:https://github.com/alibaba/hooks[2]ReactHooks&SSR:https://ahooks.js.org/zh-CN/guide/blog/SSR/[3]全新useRequest:https://ahooks.js.org/zh-CN/guide/upgrade#%E5%85%A8%E6%96%B0%E7%9A%84-userequest[4]ahooks输入输出函数处理规范:https://ahooks.js.org/zh-CN/guide/blog/function[5]DOM类Hooks使用说明:https://ahooks.js。org/zh-CN/guide/dom[6]ReactHooks&严格模式:https://ahooks.js.org/zh-CN/guide/blog/strict[7]ReactHooks&react-refresh(HMR):https://ahooks.js.org/zh-CN/guide/blog/hmr[8]v2到v3:https://ahooks.js.org/zh-CN/guide/upgrade[9]https://ahooks.js.org/zh-CN:https://ahooks.js.org/zh-CN[10]https://github.com/alibaba/hooks:https://github.com/alibaba/hooks