react hooks推出已经有一段时间了,而自定义hooks在hooks中其实是非常关键的一环,它是抽离业务逻辑和UI逻辑,复用代码的关键,因此在使用上相对于其他hooks不易掌握,你可能在开发中经常会遇到以下问题
为了解决以上疑问,下面我会结合业务的实际场景,通过几个案例,来跟大家分享自定义hooks中的一些实践与经验
注:本文默认读者具备一定的react基础
需求一:有一个Tab选项和内容区,tab的切换,会改变tabId,需要重新拉取接口数据,用以展示不同的内容
我们使用class组件实现一下,来借以发现class组件中存在的一些问题
我将这个功能抽成了三个组件
原有的class组件模式,通常是将组件拆分为UI组件和容器组件,容器组件部分处理数据逻辑,套在需要使用到该逻辑的组件上,从而达到复用代码逻辑的目的。
因此在处理Content的时候,我将其拆成了两个组件
针对之前遇到的问题,我们使用hooks进行改造
在class组件中,为了复用状态,我们将Content拆成了两个组件,并形成了嵌套。
而在hooks中,我们只使用了一个组件和一个自定义hooks
需求二:实现一个表格组件,需要分页功能,切换不同页面时,加载不同的数据
这个需求,在后台十分常见,比较常见的写法如下:
在组件中我们不仅维护了Table组件的UI状态,也同时维护了Table组件的业务逻辑,定义了多个状态
loading, dataSource , current, total
几乎每个表格组件都会包含上述的业务逻辑,此时我们就可以将业务逻辑使用Hooks的方式剥离出来,来实现复用的目的。
在编写 useTableHooks 的时候,我们需要注意两个地方
平时在写业务逻辑的时候,我们较少的会使用这种写法(将函数作为参数传入,将函数作为返回值传出),因此对于这两个地方需要额外的注意。
Table组件代码如下:
useTableHooks组件代码如下:
可以看到通过自定义hooks的改造,成功的将UI逻辑和业务逻辑给分离开来,在其他地方再次使用到表格组件时,就可以直接使用 useTableHooks 去处理分页逻辑。
整个组件变得就更加简洁可复用了。
思考:业务要求table组件需要添加查询表单,那么自定义hooks应该如何扩展呢?
通过上面两个案例,我们可以回答最开始的几个问题了