如果你用的是 react-query 或者 swc,那也没关系,毕竟都异曲同工嘛。
Q1: 应该用返回的 data 还是用 onSuccess 消费数据的问题?同理,用 error 还是 onError 处理错误?
A1: 首先,这不是个二选一的问题,这一点 useRequest 设计本身就很好,我们是可以同时用两种方式消费数据的。所以这是个最佳实践的问题。为了理解这个问题,首先需要把data中的数据分为2种,一种是用来直接渲染的数据,一种是用来处理副作用的数据。然后我们来看这两种数据处理情况:
- 渲染用的数据是指所有在return中使用的,包括条件运算等。这类数据如果放在onSuccess里处理会导致需要定义不少的useState,使得代码复杂度变高。而直接用返回的data方便简单;
- 有副作用的数据,比如根据钱包是否开立修改右上角menu展示与否。这类数据如果从data取,肯定需要用useEffect做监听处理,这就多了很多冗余逻辑,同时处理useEffect的依赖项会很复杂,这样用的多势必会增加大量rerender。而将这类数据直接在onSuccess里处理反而没有这些问题,即能保证性能,代码也清晰。
- 错误处理也是一样的,渲染错误页的数据就属于第1种情况,从返回的error取,而弹窗反馈就是副作用,属于第2种情况,用onError处理;
总结:接口返回数据分两种,用来渲染的从返回值data取,处理副作用的数据放onSuccess执行;error数据也是一样的逻辑。
